python中的非同步與同步
非同步:多工,多個任務之間執行沒有先後順序,可以同時執行,執行的先後順序不會有什麼影響,存在的多條執行主線
同步:多工,多個任務之間執行的時候要求有先後順序,必須一個先執行完成之後,另一個才能繼續執行,只有一個主線
阻塞:從呼叫者的角度出發,如果在呼叫的時候,被卡住,不能再繼續向下執行,需要等待,就說是阻塞
非阻塞:從呼叫者的角度出發,如果在呼叫的時候,沒有被卡住,能夠繼續向下執行,無需等待,就說是非阻塞
同步阻塞
非同步非阻塞
from multiprocessing import Pool
import time
import os
def water():
"""燒水
print("子程序 pid=%d" % os.getpid())
for i in range(5):
print("正在燒水中")
time.sleep(0.5)
return "水燒開了"
defhandle_water(message):
"""接收燒開水的資訊"""
print("程序pid=%d 收到了非同步任務的結束資訊: %s" % (os.getpid(), message))
pool = Pool(3)
print("主程序 pid=%d" % os.getpid())
for i in range(3):
print("打遊戲")
time.sleep(0.5)
# 回撥
pool.apply_async(water,callback=handle_water) # 非同步新增任務
for i in range(20):
print("打遊戲")
time.sleep(0.5)
pool.close()
pool.join()