繁体   English   中英

线程模块python停止并重新启动线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM