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对比 基于多线程实现并发的套接字通信 进程池与线程池 同步异步阻塞非阻塞

在非阻塞应用程序上应用 Bulkhead 模式的目的是啥?

python第三十七天,GIL全局解释器锁*****,线程池与进程池 同步异步,阻塞与非阻塞,异步回调

NIO:异步非阻塞I/O,AIO,BIO