【Python】单线程异步多线程多进程实例
生活随笔
收集整理的這篇文章主要介紹了
【Python】单线程异步多线程多进程实例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
上一篇文章主要介紹了多任務(wù)場景下單線程異步、多線程、多進程如何選擇,鏈接:多任務(wù)場景下單線程異步多線程多進程
這里主要通過三個實例去驗證一下簡單的多任務(wù)場景下,三種方式的耗時情況,假設(shè)有10個互不關(guān)聯(lián)的10個任務(wù)
總共耗時:1.9219999313354492,運行截圖:
''''''''' 多線程版本: 5個線程各負(fù)責(zé)一個任務(wù),全部完成最后只花了1秒多一點時間,所以,對于阻塞性任務(wù),例如IO密集型任務(wù), 即使有GIL,還是能發(fā)揮多線程的作用的,畢竟,時間花在IO等待上,如果是CPU密集型任務(wù)效果不大。 '''''''''import time import threadingfrom logger import Logger logger = Logger("multiThread").get_log()def multiTask(t):logger.info("任務(wù)開始:%s", t)time.sleep(1)logger.info('任務(wù)耗時1秒鐘')def main():threads = [threading.Thread(target = multiTask,args=(t,)) for t in range(0,10)]for t in threads:t.start()for t in threads:t.join()if __name__ == '__main__':t1 = time.time()main()logger.info("總共耗時:%s ",time.time()-t1)總共耗時:1.003000020980835,運行截圖:
''''''''' 單線程異步模型: 發(fā)現(xiàn)使用asyncio所的時間與多線程幾乎一致。盡管它是單線程,但因為它沒有多線程和進程的創(chuàng)建成本, 就是在單線程環(huán)境下,切換任務(wù),當(dāng)這個任務(wù)被阻塞時,立刻切換其他任務(wù),當(dāng)前面的任務(wù)完成時,在通知它。 '''''''''import asyncio import timefrom logger import Logger logger = Logger("asyncSingleThread").get_log()async def singleTask(t):logger.info("任務(wù)開始:%s",t)await asyncio.sleep(1)logger.info('任務(wù)耗時1秒鐘')async def main(loop):tasks = [loop.create_task(singleTask(t)) for t in range(0, 10)]await asyncio.wait(tasks)t4 = time.time() loop = asyncio.get_event_loop() # 建立 loop loop.run_until_complete(main(loop)) # 執(zhí)行 loop loop.close() # 關(guān)閉 loop logger.info("總共耗時:%s ", time.time() - t4)總共耗時:1.0079998970031738?,運行截圖:
總結(jié)
以上是生活随笔為你收集整理的【Python】单线程异步多线程多进程实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】提升Python程序性能
- 下一篇: python时间time模块介绍