阻塞
阻塞: 程序运行时,遇到了IO,程序挂起,cpu被切走.
非阻塞
非阻塞: 程序没有遇到IO,程序遇到IO但是我通过某种手段,让cpu强行运行我的程序.
#同步:
提交一个任务,自任务开始运行直到此任务结束(可能有IO),返回一个返回值之后,我在提交下一个# #异步:
一次提交多个任务,然后我就直接执行下一行代码.
收取结果 :
1将所有的任务的结果统一回收. 2. 完成一个任务,返回一个结果.
给三个人发布任务:
同步: 先告知第一个人完成写书的任务,我从原地等待,等他两天之后完成了,
告诉完事了,我在发布下一个任务......
异步: 直接将三个任务告知三个人,我就忙我的我,直到三个人完成之后,告知我.
方式一: 异步调用,统一回收结果.
# from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
# import time
# import random
# import os
#
# def task(i):
# print(f'{os.getpid()}开始任务')
# time.sleep(random.randint(1,3))
# print(f'{os.getpid()}任务结束')
# return i
#
# if __name__ == '__main__':
#
# # 异步调用
# pool = ProcessPoolExecutor()
# l1 = []
# for i in range(10):
# obj = pool.submit(task,i)
# l1.append(obj)
#
# pool.shutdown(wait=True)
# print(l1)
# for i in l1:
# print(i.result())
# print('===主')
# 统一回收结果: 我不能马上收到任何一个已经完成的任务的返回值,
我只能等到所有的任务全部结束统一回收.
异步调用
步调用返回值如何接收?
# from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
# import time
# import random
# import os
#
# def task(i):
# print(f'{os.getpid()}开始任务')
# time.sleep(random.randint(1,3))
# print(f'{os.getpid()}任务结束')
# return i
# if __name__ == '__main__':