国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python多進程編程技術實例分析

2020-02-23 05:50:29
字體:
來源:轉載
供稿:網友

本文以實例形式分析了Python多進程編程技術,有助于進一步Python程序設計技巧。分享給大家供大家參考。具體分析如下:

一般來說,由于Python的線程有些限制,例如多線程不能充分利用多核CPU等問題,因此在Python中我們更傾向使用多進程。但在做不阻塞的異步UI等場景,我們也會使用多線程。本篇文章主要探討Python多進程的問題。

Python在2.6引入了多進程的機制,并提供了豐富的組件及api以方便編寫并發應用。multiprocessing包的組件Process, Queue, Pipe, Lock等組件提供了與多線程類似的功能。使用這些組件,可以方便地編寫多進程并發程序。

Process

Process的使用有點像java.lang.Thread,但Thread是線程。start方法用以啟動某個進程。一個簡單的示例:

from multiprocessing import Processimport osimport timedef sleeper(name, seconds):  print "Process ID# %s" % (os.getpid())  print "Parent Process ID# %s" % (os.getppid())  print "%s will sleep for %s seconds" % (name, seconds)  time.sleep(seconds)if __name__ == "__main__":  child_proc = Process(target=sleeper, args=('bob', 5))  child_proc.start()  print "in parent process after child process start"  print "parent process abount to join child process"  child_proc.join()  print "in parent process after child process join"  print "the parent's parent process: %s" % (os.getppid())

實例化一個Process必須要指定target和args。target是新的進程的入口方法,可以認為是main方法。args是該方法的參數列表。啟動進程類似于啟動Thread,必須要調用start方法。也可以繼承Process,覆蓋run方法,在run方法中實現該進程的邏輯。調用join方法會阻塞當前調用進程,直到被調用進程運行結束。
手工終止一個進程可以調用terminate方法,在UNIX系統中,該方法會發送SIGTERM信號量,而在windows系統中,會借助TerminateProcess方法。需要注意的是,exit處理邏輯并不會被執行,該進程的子進程不會被終止,他們只會變成孤兒進程。

Queue

Queue是多進程安全的隊列,可以使用Queue實現多進程之間的數據傳遞。put方法用以插入數據到隊列中,put方法還有兩個可選參數:blocked和timeout。如果blocked為True(默認值),并且timeout為正值,該方法會阻塞timeout指定的時間,直到該隊列有剩余的空間。如果超時,會拋出Queue.Full異常。如果blocked為False,但該Queue已滿,會立即拋出Queue.Full異常。

get方法可以從隊列讀取并且刪除一個元素。同樣,get方法有兩個可選參數:blocked和timeout。如果blocked為True(默認值),并且timeout為正值,那么在等待時間內沒有取到任何元素,會拋出Queue.Empty異常。如果blocked為False,有兩種情況存在,如果Queue有一個值可用,則立即返回該值,否則,如果隊列為空,則立即拋出Queue.Empty異常。Queue的一段示例代碼:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灌阳县| 黎川县| 屏东县| 密云县| 明光市| 浦东新区| 青州市| 五常市| 莒南县| 古丈县| 宁城县| 桦川县| 搜索| 凤阳县| 镇平县| 永顺县| 肥西县| 五大连池市| 厦门市| 吉林省| 木里| 石棉县| 池州市| 顺义区| 霸州市| 昌邑市| 桐柏县| 景德镇市| 乐陵市| 舞钢市| 蒲江县| 金川县| 白玉县| 正阳县| 灵寿县| 甘洛县| 从江县| 巩义市| 敦煌市| 高青县| 太湖县|