2014-02-17 115 views
0

我有一個線程類,當我得到一條消息時,我需要調用其他方法(外部類)。我如何做到這一點?從主線程函數調用方法

class ClientThread(threading.Thread): 
    def run(self): 
     ... 
     message = asdasd.sdas 
     outside(message) 
     ... 

def outside(m): 
    ... 

當我嘗試調用我有一個錯誤:

Exception in thread Thread-1: 
Traceback (most recent call last): 
.... 
NameError: global name 'outside' is not defined 
+0

在同一個源文件中是'outside(m)'?如果是這樣,請嘗試將其放入自己的班級。如果不是,那麼確保你引用源文件'sourceFile.FunctionName()'。 – Dayan

+0

您可以將對函數的引用傳遞給線程。 – poke

+1

這應該按原樣工作。你在模塊的命名空間中運行'ClientThread'嗎? – roippi

回答

1

我的猜測是,在中ClientThread的定義和的outside之間省略代碼疙瘩的地方,你正在創建並啓動客戶端線程。此時,您的代碼將嘗試調用outside,並因給定的錯誤而失敗,因爲函數尚未定義。

您應該在定義outside後啓動您的線程,或在ClientThread之前移動outside的定義。

+0

驚人)我剛剛移動我的方法,它的工作,哈哈哈。這真是太棒了! – gJamDev