我正在寻找如何使用线程模块在python上停止线程,我发现模块不提供此方法。我已经看到一些技巧来实现一种方法来阻止线程,但这对我没有任何作用。
我的程序有一个主窗口,显示其上的每个功能,其中一个功能打开另一个窗口,用一个按钮执行“function2”。
我希望能够做什么,或者在“function2”运行时不让窗口冻结,所以我使用threading.Thread
来定义“function2”并使用Thread.run()
方法调用它。 />
这很好用,但是当“function2”完成后,我无法重新运行该函数,因为线程只能启动一次。
我需要一个解决方案,如果有人可以帮助我,我会很高兴 感谢。
答案 0 :(得分:1)
扩展评论。你拥有的是
fun2 = threading.Thread(name='funcion2',target=funcion2)
ttk.Button(loginpanel,text='Initfun2',command=fun2.start)
基本上创建一个线程并尝试在点击时重新运行它。没有重新运行线程,所以你必须在点击时创建一个新线程:
def fun2():
threading.Thread(name='funcion2',target=funcion2).start()
ttk.Button(loginpanel,text='Initfun2',command=fun2)
虽然这样做更好但它有另一个缺点:如果有人开始像疯了一样点击按钮怎么办?您希望限制要使用的线程数。因为使用a thread pool是一个很好的选择:
from concurrent.futures import ThreadPoolExecutor
THREADPOOL = ThreadPoolExecutor(10)
def fun2():
THREADPOOL.submit(funcion2)
ttk.Button(loginpanel,text='Initfun2',command=fun2)
此代码适用于Python3.x.对于Python2,我认为你需要一些外部库。