python 非阻塞模式 线程池
"""
非阻塞模式:当进程池有空闲,就将任务放入,它会继续执行主进程
"""
import os
import time
from multiprocessing import Pool
from random import random
container = []
def task(name):
print("进行任务{} 进程ID:{}".format(name, os.getpid()))
start = time.time()
# random() 的值是0到1之间,这里就表示休眠 0到2秒
time.sleep(random() * 2)
end = time.time()
return "完成任务:{} 用时:{} 进程ID:{}".format(name, (end - start), os.getpid())
def callback_func(n):
"""将进程返回的内容n,放进这个函数内运行"""
container.append(n) # 添加返回内容到container,这里也可以对返回的函数进行其它的处理
if __name__ == ‘__main__‘:
pool = Pool(5) # 创建一个进程池,里面放5个进程
tasks = ["任务1", "任务2", "任务3", "任务4", "任务5", "任务6", "任务7"]
for t in tasks:
# apply_async 非阻塞模式,只要存在没有使用的进程,就将任务放进去
pool.apply_async(task, args=(t,), callback=callback_func)
pool.close()
pool.join() # 将进程池插入到这里,只要当它里面的任务全部都执行完,才继续
for c in container:
print(c)
print("over") 相关推荐
cenylon 2020-04-29
georgeandgeorge 2020-01-02
数据猿 2019-05-10
liuxiaohua 2019-06-25
jibkfv 2019-06-21
fengling 2019-03-19
zhglinux 2017-01-10
pythonwangjunji 2018-04-27
chouliqingke 2016-11-06
CodeAsWind 2010-02-26
周小董 2018-01-06
AndroidAmelia 2017-11-17
wgPython 2015-06-30
wlpython 2019-04-18
pythoncream 2018-10-24