Python學習筆記(四):並行系統工具之os.fork, _thread, threading

來源:互聯網
上載者:User

      通過os模組中的fork方法,一個進程(Process)可以產生一個獨立子進程。fork是一個程式拷貝(copying program)的過程:當程式調用fork方法,作業系統產生一份該程式及其在記憶體中的進程的新的拷貝,並以與原始程式並行的方式開始執行這份拷貝。原始程式稱為父進程,新產生的拷貝叫做子進程。父進程可以產生任意數目的子進程(作業系統不會對此進行控制嗎?),子進程還可以產生它的子進程。這些子進程在作業系統的控制下相互獨立的並行運行。子進程可以繼續運行即便父進程已退出。Python manual中對os.fork的描述是:it generates a copy of the calling program, and returns a different value in each copy: zero in the child process and the process ID of the new child in the parent. 其中對於傳回值這部分的描述,我還不是很理解,需要繼續找一些資料。os.fork經常和os.exec結合使用使得新產生的進程執行相關操作。

      線程(Threads),又稱為“輕量級進程”(lightweight processes),多個線程並行的運行在同一個進程中。線程常用於非阻斷的輸入調用、已耗用時間很長的任務等。相比進程,線程具備效能好、簡單、共用進程全域記憶體、相容性好等優點。但是線程不是一種啟動另一個程式的方法,另外由於共用進程的全域記憶體,多個線程之間存在同步化的問題。

      _thread模組(在Python 2.X中稱為thread)中函數start_new_thread(function, args[, kwargs])產生一個新的線程並返回該線程ID,並指定該線程執行相應的函數。當函數返回(傳回值被忽略)或函數拋出異常時,線程退出。為了保證線程間的同步化,_thread模組提供了鎖(lock)的機制,線程在訪問共用資源之前必須擷取(acquire)一個鎖,在對共用資源完成操作之後,釋放(release)該鎖,這樣其他的線程才能訪問共用資源。_thread模組相關的函數是allocate_lock(...)產生一個lock對象, 通過aquire(...)/release(...)方法擷取/釋放鎖。

      如果說_thread模組是一個底層的介面的話,那麼threading模組就是一個上層的介面。threading提供了一個Thread類,該類中提供了諸如__init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None),join(self, timeout=None), start(self)等方法。

      Python中queue模組(在Python 2.X中稱為Queue)擁有普通list的屬性,同時還具備放在queue裡的對象受到線程鎖擷取/釋放操作的控制。這樣只有一個線程可以修改queue。關於queue模組的詳細定義可以參考Python的文檔http://docs.python.org/library/queue.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.