RAF*_*FIQ 5 python multithreading join
当我单独运行下面的函数时,它会在 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()
Run Code Online (Sandbox Code Playgroud)
我在程序中调用上面的函数
thread.start_new_thread(display,(val1,val2))
Run Code Online (Sandbox Code Playgroud)
线程正常启动,主程序继续,但显示功能在3秒后没有退出,请建议如何加入该线程或销毁它而不影响主程序
编辑:
在我的测试中,我认为您的实际问题在于 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()
Run Code Online (Sandbox Code Playgroud)
这对我有用。
从以前:
您应该查看更高级别的threading
模块。这是一个更好的选择。
要加入线程:
from threading import Thread
...
thread = Thread(target=display, args=(val1, val2))
thread.start()
...
thread.join()
Run Code Online (Sandbox Code Playgroud)
对此的替代方案是multiprocessing
模块。
from multiprocessing import Process
...
process = Process(target=display, args=(val1, val2))
process.start()
...
process.join()
Run Code Online (Sandbox Code Playgroud)
与threading
or不同的是thread
,multiprocessing
offer Process.terminate()
。
归档时间: |
|
查看次数: |
4042 次 |
最近记录: |