2015-01-12 52 views
0

在Linux上使用Python 3.4在Python 3中是否使用模塊線程和多處理相互排斥?

我新的並行編程和運行threading.Threads當我遇到問題()爲一個特定的方法,併爲另一個模塊multiprocessing.Process()。當另一個被註釋掉時,這兩種方法都可以正常工作。這兩種方法都沒有任何關係(例如,不嘗試共享數據)。但是,當我把它們都運行的時候都不行,一切都凍結了。據我所知,多處理似乎鎖定了。我認爲同樣的事情適用於線程。

所以第一步是斷言這是否甚至可能?

(我有一種感覺有些人會問這樣做的原因...的線程執行一個簡單的捕捉用戶密鑰檢查,同時多完成一些繁重)

我提供一個例子(更像是僞代碼)來幫助說明如何使用這些方法。

文件t.py

import threading 

Class T: 

    Def __init__(): 
     t = threading.Thread(target = self.ThreadMethod) 
     t.daemon = True 
     t.start() 

    Def ThreadMehod(): 
     # capture key 

文件m.py

import multiproceessing 

Class M: 

    Def __init__(): 
     mp = multiprocessing.Process(target = self.ProcessMethod) 
     mp.start() 

    Def ProcessMethod(): 
     # heavy lifting 

文件main.py

import T 
import M 

Class main: 

    Def __init__(): 
    T() 

    Def DoTheProcess() 
    for i in range(5): 
     M() 
+1

簡短的回答是,我不認爲這應該發生,我已經在同一個應用程序之前沒有問題,雖然有一個不同的安排,但你檢查,以確保你沒有得到變量名稱的重疊?你如何導入?你是從x導入*還是隻導入x? –

+0

我剛剛嘗試使用池而不是過程,現在看來,這兩個工作...就像我說的,我是新來的mp,所以我可能實施過程錯誤。我會接受你的答案,如果我可以... – user1267259

+0

你能提供[一個最小但完整的代碼示例](http://stackoverflow.com/help/mcve)?這可能有助於診斷問題。提及什麼是您的操作系統,以及如何運行腳本:您希望發生什麼?而發生什麼呢? – jfs

回答

0

「沒有。線程和多不相互EXLUSIVE。雖然有是已知的問題(例如atfork存在的原因),這些問題限制了它們如何一起使用。「 - JF塞巴斯蒂安

+0

http://meta.stackoverflow。COM /問題/ 251597 /問題與 - 沒有答案,但是,問題 - 解決 - 在最意見 – user1267259

相關問題