一、同步和异步的区别:
案例:
同步:就是女儿叫你起床,你还没有起来,她一直在床边等着也不去早读,等你起来之后,再去单读。
异步:就是女儿叫你起床,你还没有起来,她对着你房间喊一声"起床了",然后就不管了,自己去早读了。
二、异步应用
1、为完成某个任务,不同程序单元之间过程中无需通信协调,也能完成任务的方式。
2、不相关的程序单元之间可以是异步的。
3、例如,爬虫下载网页。调度程序调用下载程序后,即可调度其他任务,而无需与该下载任务保持通信以协调行为。不同网页的下载、保存等操作都是无关的,也无需相互通知协调。这些异步操作的完成时刻并不确定。异步意味着无序。
三、代码展示
from multiprocessing import Process, Pool
import os
import time
# 你女儿早读,边叫你起床,最后一起吃早餐
def test1():
print(f'当前进程id{os.getpid()},父进程id{os.getppid()}')
print('女儿叫你起床,你开始慢慢起床')
time.sleep(3)
print('你起来了')
return 'abc'
def test2():
print(f'女儿开始早读,当前进程id{os.getpid()}')
time.sleep(4)
print('女儿早读完成')
# todo 前面的2个异步任务test1和test2异步任务,都完成了,才调用test3
def test3(args):
print(f'最后一起吃早餐,当前进程的id{os.getppid()}')
print(f'参数是{args}')
if __name__ == '__main__':
# 女儿使用主进程代表
# 父亲使用进程池中某个子进程代表
# 创建进程池
pool = Pool(4)
pool.apply_async(func=test1, callback=test3) # todo callback表示回调函数,test1执行完毕之后,才会回调test3(自动的调用),主进程调用
# 主进程代表女,叫父亲起床之后,继续做自己的早读
test2()
print(f'主进程结束,主进程id{os.getpid()}')
代码执行顺序