python中的异步与同步
異步: 多任務(wù), 多個(gè)任務(wù)之間執(zhí)行沒(méi)有先后順序,可以同時(shí)運(yùn)行,執(zhí)行的先后順序不會(huì)有什么影響,存在的多條運(yùn)行主線
?
同步: 多任務(wù), 多個(gè)任務(wù)之間執(zhí)行的時(shí)候要求有先后順序,必須一個(gè)先執(zhí)行完成之后,另一個(gè)才能繼續(xù)執(zhí)行, 只有一個(gè)主線
?
阻塞:從調(diào)用者的角度出發(fā),如果在調(diào)用的時(shí)候,被卡住,不能再繼續(xù)向下運(yùn)行,需要等待,就說(shuō)是阻塞
?
非阻塞: 從調(diào)用者的角度出發(fā), 如果在調(diào)用的時(shí)候,沒(méi)有被卡住,能夠繼續(xù)向下運(yùn)行,無(wú)需等待,就說(shuō)是非阻塞
?
同步 阻塞
?
異步 非阻塞
?
from multiprocessing import Pool
import time
import os
?
def water():
??? """燒水"""
??? print("子進(jìn)程 pid=%d" % os.getpid())
??? for i in range(5):
??????? print("正在燒水中")
??????? time.sleep(0.5)
??? return "水燒開(kāi)了"
?
defhandle_water(message):
??? """接收燒開(kāi)水的信息"""
??? print("進(jìn)程pid=%d 收到了異步任務(wù)的結(jié)束信息: %s" % (os.getpid(), message))
?
pool = Pool(3)
?
print("主進(jìn)程 pid=%d" % os.getpid())
for i in range(3):
??? print("打游戲")
??? time.sleep(0.5)
?
??????????????????????? # 回調(diào)
pool.apply_async(water,callback=handle_water) ?# 異步添加任務(wù)
?
for i in range(20):
??? print("打游戲")
??? time.sleep(0.5)
?
pool.close()
pool.join()
?
總結(jié)
以上是生活随笔為你收集整理的python中的异步与同步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle 02085,OracleD
- 下一篇: python中的常见的列表操作及注意事项