非阻塞式:
(1)全部添加到队列中,立刻返回,并没有等待其他进程执行完毕;
(2)回调函数等待进程任务完成才调用;
from multiprocessing import Pool
import os
import time
from random import random
def task(task_name):
print("开始做任务了!", task_name)
start = time.time()
# 休眠
time.sleep(random())
end = time.time()
return "完成任务:{}!用时:{},进程id:{}".format(task_name, (end - start), os.getpid())
container = []
def callback_func(n):
return container.append(n)
if __name__ == '__main__':
pool = Pool(5)
tasks = ["python1", "python2", "python3", "python4", "python5", "python6", "python7", "python8"]
for task1 in tasks:
pool.apply_async(task, args=(task1,), callback=callback_func)
pool.close()
pool.join()
for c in container:
print(c)
print("结束!!!")
阻塞式:
(1)并没有体现进程的有点;
(2)添加一个执行一个,新的任务执行必须等待当前的任务完成;
from multiprocessing import Pool
import os
import time
from random import random
def task(task_name):
print("开始做任务了!", task_name)
start = time.time()
# 休眠
time.sleep(random())
end = time.time()
print("完成任务:{}!用时:{},进程id:{}".format(task_name, (end - start), os.getpid()))
if __name__ == '__main__':
pool = Pool(5)
tasks = ["python1", "python2", "python3", "python4", "python5", "python6", "python7", "python8"]
for task1 in tasks:
pool.apply(task, args=(task1,))
pool.close()
pool.join()
print("结束!!!")
以上内容属于python进阶比较经典的教程,欢迎大家补充。如果你觉得不错,欢迎关注我置顶的公众号:shenbianshi88
你的支持,是我进步的最大动力,编程人生,快乐分享,欢迎你我,共同进步。