присоединиться к ветке после start_new_thread - PullRequest
3 голосов
/ 11 февраля 2012

ниже функция завершается через 3 секунды, когда я запускаю ее отдельно, но когда я вызываю ее в потоке, она никогда не завершается. пожалуйста, предложите, что не так в этом коде.

def display(val1, val2):

    root =  Tk()
    clock = Label(root, font=('times', 20, 'bold'), bg='white')
    clock.pack(fill=BOTH, expand=0)
    def tick():
        time1 = val1 +'\n' + val2
        clock.config(text=time1)
    tick()
    root.after(3000,root.quit)
    root.mainloop()

Я вызываю вышеуказанную функцию в моей программе как

thread.start_new_thread(display,(val1,val2))

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

1 Ответ

0 голосов
/ 11 февраля 2012

Редактировать:

В моем тестировании я думаю, что ваша настоящая проблема связана с tkinter.Вы хотите Tk.destroy() не Tk.quit()

from tkinter import * # < Python3.x you will need Tkinter not tkinter.
from threading import Thread

def display(val1, val2):
    root =  Tk()
    clock = Label(root, font=('times', 20, 'bold'), bg='white')
    clock.pack(fill=BOTH, expand=0)
    def tick():
        time1 = val1 +'\n' + val2
        clock.config(text=time1)
    tick()
    root.after(3000, root.destroy)
    root.mainloop()

thread = Thread(target=display, args=("1", "2"))
thread.start()

Это сработало для меня.

С тех пор:

Вы должны взглянуть на более высокий уровень threading модуль.Это лучший выбор.

Чтобы присоединиться к ветке:

from threading import Thread
...
thread = Thread(target=display, args=(val1, val2))
thread.start()
...
thread.join()

Альтернативой этому является модуль multiprocessing.

from multiprocessing import Process
...
process = Process(target=display, args=(val1, val2))
process.start()
...
process.join()

И в отличие от threading или thread, multiprocessing предлагает Process.terminate().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...