2017-06-22 74 views
0

我有一個使用的RabbitMQ和鼠兔模塊從客戶端接收消息的Python腳本。給定一條消息「啓用」,該腳本需要在新線程中運行一個方法,並給出「禁用」消息,現在需要終止以「啓用」開頭的線程。線程是否必須從同一個線程創建並返回到同一個線程?

然而,每次收到郵件時,鼠兔觸發我假設在一個新的線程運行的回調方法,一旦消息完成正在處理,回調線程終止。

在這種情況下,兩個回調在不同的線程啓動和終止另一個線程。我注意到,當我嘗試加入(),我得到:

File "/usr/lib/python2.7/threading.py", line 940, in join 
    raise RuntimeError("cannot join current thread") 

有一些規則,也開始另一個線程在同一線程加入()呢?或者我誤解了這個問題?

我最初以爲的錯誤意味着一個線程試圖加入本身,而是我相信,不是這樣,這個問題開始,自從兩個不同的線程啓動創建和終止同一線程。

回答

1

你誤解了問題。錯誤消息告訴你一個線程試圖加入本身。基本上是這樣的:

def run(): 
    thread.join() 

thread= Thread(target=run) 
thread.start() 

這顯然沒有任何意義。因此拋出異常。


至於解決這個錯誤:很難說你做錯了什麼,而不知道你的程序在做什麼。這是可能的,如果你刪除調用.join()您的代碼將工作,或者它可能是你錯誤的線程上調用.join()。你必須自己調試。

1

threading documentation

join()方法引發拋出一個RuntimeError如果試圖加入當前線程因爲這將導致死鎖。在線程啓動之前加入()線程也是錯誤的,並且嘗試這樣做會引發相同的異常。

相關問題