2013-10-01 75 views
0

我試圖瞭解線程(即時通訊新的)以更好地獲得我的代碼。現在,我有一個類的.py文件與一些功能。Python線程問題

在我的主要中,我爲每個程序中的這個類初始化一個對象。但是,使用線程,我希望能夠在一個程序中創建所有這些對象,並使用線程調用該函數。

def inicializa(): 
clientList = list() 
thread_list = list() 
config = configparser.ConfigParser() 
config.read("accounts.ini") 
for section in config.sections(): #define a section da conta que vou usar 
        email = config.get(section,'email') 
        password = config.get(section,'password') 
        the_hash = config.get(section,'hash') 
        authdata = config.get(section,'authdata') 
        authdata = eval(authdata) 
        client = MyClient(email,password,the_hash,authdata) 
        clientList.append(client) 


for client in clientList: 
    t = threading.Thread(target=client.getBla()) # this function is inside of my class, its work OK outside of the thread if i put client.getBla. 
    thread_list.append(t) 

for thread in thread_list: 
    thread.start() 

return clientList 

我得到當我嘗試使用線程啓動功能client.getBla錯誤是:

異常螺紋加工-1: 類型錯誤:int對象是不可調用的。

我的函數dosnt採取任何參數,所以我不知道發生了什麼,因爲我的client.getBla()線程外工作正常。

謝謝大家。

回答

1
t = threading.Thread(target=client.getBla()) 

什麼這行代碼評估client.getBla()(返回int),並把它作爲一個命名參數來線程。該target參數採用一個可調用的,所以你應該這樣做,而不是:

t = threading.Thread(target=client.getBla) 

這樣做,你傳遞給函數本身,而不是功能結果

+0

哇,這是一個相當快的答案,我想它的工作。就像我說的那樣,這是我第一次使用線程,是否有任何方法來檢查線程是否同時工作,而不是像「for」? –

+0

@Jefferson做一個簡單的方法就是阻止線程,例如使用'time.sleep()'。如果你在5個不同的線程中執行1秒的睡眠,程序應該在1秒內完成,而不是5秒。 – goncalopp

+0

不知道在哪裏使用time.sleep(),但我會嘗試它。我會很快發佈結果。謝謝。 –