线程无限循环
Threading an Infinite Loop
def check_incoming_messages_to_client(incoming_chat_messages,uri_str, kill_threads_subscript):
global kill_threads
messaging = Pyro4.Proxy(uri_str)
while(TRUE):
if(messaging.get_connection() == 'yes'):
msg = messaging.read_messages_to_client()
if (msg):
incoming_chat_messages.insert(END, msg)
if(kill_threads[kill_threads_subscript]):
print('break loop')
break
print('start')
t1 = Thread(target=check_incoming_messages_to_client(incoming_chat_messages[length-1],uri_str, kill_threads_subscript))
t1.setDaemon(True)
t1.start()
print('end')
上面的代码只打印 start
而不是 end
。那就是卡在死循环里了,一定不是因为线程化了。我将如何修复它?
Thread(target=check_incoming_messages_to_client(incoming_chat_messages[length-1],uri_str, kill_threads_subscript))
调用你的函数,然后将结果作为 target
传递(除了因为它永远不会结束,没有结果会实现,你永远不会甚至构建 Thread
).
您想分别传递函数 uncalled 和 args
以便 thread 在运行时调用它,而不是主线程 运行 它甚至在工作线程启动之前:
t1 = Thread(target=check_incoming_messages_to_client,
args=(incoming_chat_messages[length-1], uri_str, kill_threads_subscript))
def check_incoming_messages_to_client(incoming_chat_messages,uri_str, kill_threads_subscript):
global kill_threads
messaging = Pyro4.Proxy(uri_str)
while(TRUE):
if(messaging.get_connection() == 'yes'):
msg = messaging.read_messages_to_client()
if (msg):
incoming_chat_messages.insert(END, msg)
if(kill_threads[kill_threads_subscript]):
print('break loop')
break
print('start')
t1 = Thread(target=check_incoming_messages_to_client(incoming_chat_messages[length-1],uri_str, kill_threads_subscript))
t1.setDaemon(True)
t1.start()
print('end')
上面的代码只打印 start
而不是 end
。那就是卡在死循环里了,一定不是因为线程化了。我将如何修复它?
Thread(target=check_incoming_messages_to_client(incoming_chat_messages[length-1],uri_str, kill_threads_subscript))
调用你的函数,然后将结果作为 target
传递(除了因为它永远不会结束,没有结果会实现,你永远不会甚至构建 Thread
).
您想分别传递函数 uncalled 和 args
以便 thread 在运行时调用它,而不是主线程 运行 它甚至在工作线程启动之前:
t1 = Thread(target=check_incoming_messages_to_client,
args=(incoming_chat_messages[length-1], uri_str, kill_threads_subscript))