python 非阻塞模式 线程池
Posted 乘风去破浪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 非阻塞模式 线程池相关的知识,希望对你有一定的参考价值。
1 """ 2 非阻塞模式:当进程池有空闲,就将任务放入,它会继续执行主进程 3 """ 4 import os 5 import time 6 from multiprocessing import Pool 7 from random import random 8 9 container = [] 10 11 12 def task(name): 13 print("进行任务{} 进程ID:{}".format(name, os.getpid())) 14 start = time.time() 15 # random() 的值是0到1之间,这里就表示休眠 0到2秒 16 time.sleep(random() * 2) 17 end = time.time() 18 return "完成任务:{} 用时:{} 进程ID:{}".format(name, (end - start), os.getpid()) 19 20 21 def callback_func(n): 22 """将进程返回的内容n,放进这个函数内运行""" 23 container.append(n) # 添加返回内容到container,这里也可以对返回的函数进行其它的处理 24 25 26 if __name__ == ‘__main__‘: 27 pool = Pool(5) # 创建一个进程池,里面放5个进程 28 tasks = ["任务1", "任务2", "任务3", "任务4", "任务5", "任务6", "任务7"] 29 for t in tasks: 30 # apply_async 非阻塞模式,只要存在没有使用的进程,就将任务放进去 31 pool.apply_async(task, args=(t,), callback=callback_func) 32 33 pool.close() 34 pool.join() # 将进程池插入到这里,只要当它里面的任务全部都执行完,才继续 35 36 for c in container: 37 print(c) 38 39 print("over")
以上是关于python 非阻塞模式 线程池的主要内容,如果未能解决你的问题,请参考以下文章
4月27日 python学习总结 GIL进程池线程池同步异步阻塞非阻塞
python 之 并发编程(进程池与线程池同步异步阻塞非阻塞线程queue)
27 Apr 18 GIL 多进程多线程使用场景 线程互斥锁与GIL对比 基于多线程实现并发的套接字通信 进程池与线程池 同步异步阻塞非阻塞