2013-04-06 27 views
0

我爲我的應用程序創建了一個簡單的插件系統,現在我想在一個新線程中運行每個插件。
這裏是我的代碼的一部分:從新線程中的另一個模塊運行一個函數?

def newThread(self, f, args=()): 
     t = threading.Thread(target=f, args=args) 
     t.deamon = True 
     t.start() 
     return t 

print "s" 

for mod in imported_modules: 
    if 'init' in vars(mod): 
     newThread(mod.init, None) 

print 1 

我的一個插件是在插座上監聽TCP服務器。如果我在主線程中運行它,應用程序不會加載其他插件並等待服務器停止!
另外上面的代碼不會在我的插件上運行init函數。
現在的問題是:
如何在新線程中調用外部函數?
在此先感謝!

+0

在CPython中的線程已知有缺陷。如果您包含一些能夠證明您遇到問題的代碼,那將會很有幫助。 – NPE 2013-04-06 07:23:32

+0

我不明白。你不能在一個單獨的線程中運行你的TCP服務器嗎? – freakish 2013-04-06 07:23:59

+0

@freakish tcp服務器沒關係! 'newThread'不能從另一個模塊運行一個功能 – 2013-04-06 07:26:09

回答

0

問題是,當我們試圖創建一個新線程時,我們應該將args傳遞給我們想在新線程中調用它的方法。如果它沒有得到任何參數,我們應該通過它像這樣的一個空元組:

newThread(mod.init,()) 
相關問題