我有一个Python脚本,它使用RabbitMQ和pika模块接收来自客户端的消息。给定一条消息" enable",脚本需要在新线程中运行一个方法,并给出一条消息"禁用",以"启用&#34开头的线程;现在需要终止。
但是,每次收到消息时,pika都会触发一个回调方法,我假设它在新线程中运行,一旦消息处理完毕,回调线程就会终止。
在这种情况下,不同线程中的两个回调会启动和终止另一个线程。我注意到当我尝试加入()时,我得到:
File "/usr/lib/python2.7/threading.py", line 940, in join
raise RuntimeError("cannot join current thread")
是否有一些规则,启动另一个线程的同一个线程也必须加入()它?或者我误解了这个问题?
我最初认为错误意味着一个线程试图加入自己,但我确信事实并非如此,并且由于两个不同的线程开始创建和终止同一个线程,因此问题就开始了。
答案 0 :(得分:1)
如果尝试加入当前线程,join()会引发RuntimeError,因为这会导致死锁。在线程启动之前加入()线程也是一个错误,并且尝试这样做会引发相同的异常。
答案 1 :(得分:1)
你误解了这个问题。错误消息告诉您线程正在尝试加入本身。基本上是这样的:
def run():
thread.join()
thread= Thread(target=run)
thread.start()
显然,这没有任何意义。因此抛出异常。
至于修复这个错误:在不知道你的程序在做什么的情况下,很难说出你做错了什么。如果您取消对.join()
的调用,或者可能是您在错误的主题上调用.join()
,那么您的代码可能会有效。您必须自己调试它。