zoukankan      html  css  js  c++  java
  • 线程池和进程池的使用

    线程池和进程池模块:

    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    
    Python2版本:
    	线程池:不支持
    	进程池:支持
    Python3版本:
    	线程池:支持
    	进程池:支持

    ThreadPoolExecutor 线程池

    ThreadPoolExecutor 是一个 Executor 子类,它使用一个线程池来异步执行调用。

    语法:

    class concurrent.futures.ThreadPoolExecutor(max_workers=None, thread_name_prefix='')

    一个 Executor 子类,它使用一个最多 max_workers 线程的池来异步地执行调用。

    如果 max_workers 是 None 或未给出,它将默认为机器上的处理器数乘以 5,假设 ThreadPoolExecutor 经常用于重叠I/O而不是CPU工作,并且工作程序的数量应该高于数量的 ProcessPoolExecutor工人。

     thread_name_prefix 参数,以允许用户控制由池创建的工作线程的threading.Thread名称,以便于调试。

    ProcessPoolExecutor 进程池

    ProcessPoolExecutor 类是一个 Executor 子类,它使用进程池来异步执行调用。 ProcessPoolExecutor 使用 multiprocessing 模块,它允许它侧面 Global Interpreter Lock,但也意味着只有可拾取对象可以被执行和返回。

    __main__ 模块必须可以由worker子进程导入。这意味着 ProcessPoolExecutor 将不在交互式解释器中工作。(进程池必须在main中执行才生效)

    从提交到 ProcessPoolExecutor 的可调用方调用 Executor 或 Future 方法将导致死锁。

    语法:

    class concurrent.futures.ProcessPoolExecutor(max_workers=None)
    

    使用最多 max_workers 进程的池异步执行调用的 Executor 子类。如果 max_workers 是 None 或未给出,它将默认为机器上的处理器数。如果 max_workers 低于或等于 0,则将产生 ValueError

    当其中一个工作进程突然终止时,现在会出现 BrokenProcessPool 错误。以前,行为是未定义的,但对执行器或其未来的操作通常会冻结或死锁。

    import time
    def task(i):
        time.sleep(1)
        print(i)
    
    
    for row in range(100):
        task(row)
    串行示例
    # 100任务
    import time
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    
    def task(i):
        time.sleep(1)
        print(i)
    
    p = ThreadPoolExecutor(10) #有100个任务,每次只处理10个任务,其他任务等待前10个任务完成
    # p = ProcessPoolExecutor(10) #进程池,只需要把ThreadPoolExecutor更改为ProcessPoolExecutor即可。
    for row in range(100):
        p.submit(task,row)
    线程池和进程池示例
  • 相关阅读:
    select查询语句
    springboot的热部署
    springboot入门
    java学习之Semaphore信号量
    Java学习之自定义线程池
    java学习之生产者消费者模式
    sql通过其中一个字段计算另一个字段的值
    activeMq用mysql实现持久化方式
    idea创建Hystrix入门实例
    idea创建Eureka Server入门实例
  • 原文地址:https://www.cnblogs.com/luchuangao/p/7252081.html
Copyright © 2011-2022 走看看