Потоки бесконечного цикла - PullRequest
0 голосов
/ 09 ноября 2018
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. Это означает, что он застрял в бесконечном цикле, чего не должно быть, потому что он был нарезан. Как я это исправлю?

1 Ответ

0 голосов
/ 09 ноября 2018

Thread(target=check_incoming_messages_to_client(incoming_chat_messages[length-1],uri_str, kill_threads_subscript)) вызывает вашу функцию, затем передает результат как target (за исключением того, что он никогда не заканчивается, результат никогда не материализуется, и вы даже не создаете Thread).

Вы хотите передать функцию без вызова и args отдельно, чтобы поток вызывал ее при запуске, а не основной поток, выполняющий ее до рабочего потока даже запускает:

t1 = Thread(target=check_incoming_messages_to_client,
            args=(incoming_chat_messages[length-1], uri_str, kill_threads_subscript))
...