簡體   English   中英

分叉后運行線程會發生什么?

[英]What happens to running threads after forking?

我正在使用基於Python的ERP OpenERP,它使用不同的線程(每個客戶端一個線程等)。 我想使用multiprocessing.Process()到fork()並調用一個長時間運行的方法。

我的問題是:父母的線程會發生什么? 他們會被復制並繼續運行嗎? 子進程是否會在服務器套接字上調用accept()?

謝謝你的回答,

分叉不復制線程,只復制主線程。 所以要非常小心分叉多線程應用程序,因為它會導致不可預測的副作用(例如,當某個線程在一個互斥的關鍵部分執行時發生分叉時),除非你知道你的代碼,否則你的分叉過程中確實會出現問題。理想地分叉。

雖然我上面說的所有內容都是正確的,但有一個名為pthread_atfork()的解決方法(至少在Linux上),它在分叉進程時充當回調(您可以重新創建所有需要的線程)。 雖然它適用於C應用程序,但它不適用於Python應用程序。

有關詳細信息,請參閱:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM