[英]Threading module python stopping and re-start threads
我一直在寻找如何使用线程模块在python上停止线程,但我发现模块未提供此方法。 我已经看到了一些技巧来实现一种停止线程的方法,但是这对我没有用。
我的程序有一个主窗口,其中显示了每个功能,并且其中一个功能会打开另一个窗口,并通过按钮执行“ function2”。 我希望能够执行某些操作,或者在“ function2”运行时不让窗口冻结,因此我使用threading.Thread
定义了“ function2”,并使用Thread.run()
方法对其进行了Thread.run()
。
这很好用,但是完成“ function2”后,由于线程只能启动一次,因此我无法重新运行该函数。
我需要一个解决方案,如果有人可以帮助我,我会很高兴。
谢谢。
扩展评论。 你拥有的是
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)
虽然这样做更好,但是它还有另一个缺点:如果有人像疯了一样开始单击该按钮怎么办? 您想限制要使用的线程数。 为此,使用线程池是一个不错的选择:
from concurrent.futures import ThreadPoolExecutor
THREADPOOL = ThreadPoolExecutor(10)
def fun2():
THREADPOOL.submit(funcion2)
ttk.Button(loginpanel,text='Initfun2',command=fun2)
此代码适用于Python3.x。 对于Python2,我认为您需要一些外部库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.