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

    回调函数是由父进程调用

  • 相关阅读:
    Verilog HDL的程序结构及其描述
    VerilogHDL概述与数字IC设计流程学习笔记
    常用算法与设计模式
    DOM笔录
    JavaScript笔录
    Windows系统版本型号MSDN版、OEM版、RTM版、VOL版区别
    Yaml学习笔录
    Linux关闭iptables以及selinux
    Centos配置163YUM源
    utf8 和 UTF-8 在使用中的区别
  • 原文地址:https://www.cnblogs.com/Loren2o/p/9542813.html
Copyright © 2011-2022 走看看