zoukankan      html  css  js  c++  java
  • 网络编程——线程池

    在一个池子里,放固定数量的线程,这些线程等待任务,一旦有任务来,就有线程自发的去执行任务。

    concurrent.futures  这个模块是异步调用的机制

    concurrent.futures  提交任务都是用submit

    for + submit 多个任务的提交

    shutdown 是等效于Pool中的close + join ,是不允许再继续向池中增加任务,然后让父进程(线程)等待池中所有进程执行完所有任务。

    如何把多个任务扔进池中?

      要么使用 for+ submit 的方式去提交多个任务

      要么直接使用map(func,iterable)方式去提交多个任务

      

    from concurrent.futures import ThreadPoolExecutor
    import time
    
    def func(num):
        sum = 0
        for i in range(num):
            sum += i **2
        print(sum)
    
    t = ThreadPoolExecutor(20)
    start = time.time()
    t.map(func, range(1000))
    t.shutdown()
    print(time.time() - start)

    不同的方式提交多个任务(for + submit 或者map), 拥有不同的拿结果的方式

      如果是for + submit 的方式提交任务,拿结果用result方法

      如果是用map的方式提交任务,结果是一个生成器,采用__next__()的方式去拿结果

    from concurrent.futures import ThreadPoolExecutor
    
    def func(num):
        sum = 0
        for i in range(num):
            sum += i **2
        return sum
    
    t = ThreadPoolExecutor(20)
    
    res = t.map(func, range(100))
    t.shutdown()
    
    while 1:
        try:
            print(res.__next__())
        except:
            StopIteration

    关于回调函数,不管是Pool进程池的方式,还是ProcessPoolExecutor的方式开启进程池,

    回调函数都是由父进程调用

    关于回调函数,ThreadPoolExecutor

    回调函数是由父进程调用

  • 相关阅读:
    PHP静态页生成
    svn部署web项目
    Nginx出现403 forbidden
    Node-red的基础使用——inject/debug/function的使用(1)
    功能/性能测试报告的编写格式及模板
    node-red在不同环境安装步骤
    node-red实现接口自动化测试——初步认识
    docker删除image
    django测试开发,例一个接口的开发逻辑
    django测试平台开发,登录,验证,退出
  • 原文地址:https://www.cnblogs.com/Loren2o/p/9542813.html
Copyright © 2011-2022 走看看