2013-12-07 61 views
0

我試圖運行Python中的文件,並在它的內部是一個類:螺紋麻煩!! - Python的

class MyClass(threading.Thread): 
    def __init__(self, a, b, c, d): 
     threading.Thread.__init__(self) 
     self.varA = a 
     self.varB = b 
     self.varC = c 
     self.varD = d 
     print (self) 
     self.run() 
    def run(self): 
     ... 
在我的文件

我創建多個線程,但我有這個treaceback:螺紋 異常(nameThread) : 回溯(最近通話最後一個):

File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 

    File "/usr/lib/python2.7/threading.py", line 763, in run 
    self.__target(*self.__args, **self.__kwargs) 

    TypeError: 'MyClass' object is not callable 

這happends所有線程。 我很困惑

in MainThread我在創建後打印每個線程的狀態,首先說'開始',但之後它說'停止'。

任何幫助表示讚賞,謝謝。

抱歉拼寫錯誤 長時間沒有在英語

這裏寫的是代碼,啓動線程:

for i in range(1,X): 
    print ('inside' + str(i)) for debug 
    nomb = 'thred' + str(i) 
    t = threading.Thread(target=surtidor(i, fin, estado, s), name = 'THREAD' + str(i)) 
    hilos.append(t) 
    t.start() 
    print (hilos) # for debug 

嗨再次更新的情況: 現在我做什麼蒂姆·彼得斯說,我調用start().- 現在線程真的運行了,但是他們首先拋出了相同的異常,我知道它們運行是因爲它們運行一個循環,並且在每次重複時都會打印它們的名稱。 任何想法是爲什麼?

+2

您應該將您的問題標題修改爲更具描述性的標題。你目前的頭銜'threadin trouble !! - Python的」真的是沒有幫助的 –

回答

2

爲了強調評論中已經提到的內容:請勿撥打.run()。作爲文檔說,.start()

安排對象的run()方法在單獨的控制線程來調用 。

這是唯一的辦法.run()旨在使用:通過自動調用- 只有靠 - .start()

這就是說,恐怕你沒有向我們展示你麻煩的真正原因。您需要顯示您用來創建和啓動線程的代碼。你所顯示的不能產生你所看到的錯誤。

+0

而且,爲了擴大這個,試着提供一個[SSCCE](http://sscce.org)。 – glglgl

1

你應該呼叫run初始化

以下是我所期望的一個線程類

import threading 
class MyClass(threading.Thread): 
    def __init__(self, a, b, c, d): 
     threading.Thread.__init__(self) 
     self.varA = a 
     self.varB = b 
     self.varC = c 
     self.varD = d 
     print (self) 
     # self.run() 
    def run(self): 
     print self.varA 


if __name__ == '__main__': 
    mc = MyClass('a', 'b', 'c', 'd') 
    mc.start() 

你不應該在def run()離開了代碼的正常使用情況。很難說明問題的確切原因

+0

我敢肯定,這裏面運行的代碼()是沒有問題的,即使我把裏面的run()只是這樣一行: 打印(‘再見’) 沒什麼變化 – user3058972

+2

你不應該叫'。運行()'期間。改用'.start()'。 – jfs

+0

@ J.F.Sebastian同意。我的不好 –