Python作為一種腳本語言,自帶有多種處理并發(fā)的機(jī)制,其中包括進(jìn)程和協(xié)程。進(jìn)程是操作系統(tǒng)層面的概念,指運行的程序?qū)嵗鴧f(xié)程則是更高層次的并發(fā)方式,可以使一個線程在多個任務(wù)間切換執(zhí)行,提高程序的并發(fā)性。
Python使用multiprocessing模塊來實現(xiàn)進(jìn)程,通過創(chuàng)建Process對象來啟動一個子進(jìn)程:
import multiprocessing def worker(): print('Worker process started') if __name__ == '__main__': p = multiprocessing.Process(target=worker) p.start() p.join()
這個例子創(chuàng)建一個Process對象來啟動另一個進(jìn)程,執(zhí)行worker函數(shù)。注意到在Windows系統(tǒng)下,如果不在if __name__ == '__main__'代碼塊中執(zhí)行代碼,會發(fā)生錯誤。這是因為Windows下的進(jìn)程啟動機(jī)制不同于Unix系統(tǒng)。
協(xié)程則可以使用Python標(biāo)準(zhǔn)庫中的asyncio模塊,通過async和await關(guān)鍵字來實現(xiàn):
import asyncio async def worker(): print('Worker coroutine started') async def main(): await worker() if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main())
這個例子定義了一個協(xié)程worker和一個協(xié)程main,使用asyncio庫提供的事件循環(huán)來執(zhí)行協(xié)程。調(diào)用run_until_complete方法開始執(zhí)行。
總體而言,使用Python的并發(fā)機(jī)制可以方便地處理多任務(wù)的問題,進(jìn)程和協(xié)程各自有其適用的場合。進(jìn)程適合處理計算密集型的任務(wù),而協(xié)程則更適合處理I/O密集型的任務(wù),能夠提高程序處理I/O的效率。