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

时间:2017-11-29 13:59:42

标签: python multithreading

我正在寻找如何使用线程模块在python上停止线程,我发现模块不提供此方法。我已经看到一些技巧来实现一种方法来阻止线程,但这对我没有任何作用。

我的程序有一个主窗口,显示其上的每个功能,其中一个功能打开另一个窗口,用一个按钮执行“function2”。 我希望能够做什么,或者在“function2”运行时不让窗口冻结,所以我使用threading.Thread来定义“function2”并使用Thread.run()方法调用它。 /> 这很好用,但是当“function2”完成后,我无法重新运行该函数,因为线程只能启动一次。

我需要一个解决方案,如果有人可以帮助我,我会很高兴 感谢。

1 个答案:

答案 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,我认为你需要一些外部库。