我正在学习线程和GUI与tkinter,我有一个问题要问你:
首先是我的代码:
import tkinter as tk
from queue import Queue
import threading
num_threads = 8
enclosure_queue = Queue()
def deviceconnector(i, q):
ip = q.get()
print("Do something")
def main():
for i in range(num_threads):
thread = threading.Thread(target=deviceconnector, args=(i, enclosure_queue,), daemon=True)
thread.start()
print(threading.active_count())
root = tk.Tk()
button_frame = tk.Frame(root)
button_frame.pack(side="right")
run_button = tk.Button(button_frame, text="Run HC", command=main)
run_button.grid(padx=10, pady=10)
if __name__ == '__main__':
root.mainloop()
结果只是一个带有按钮的窗口,该按钮将执行触发线程到deviceconnector的主函数,我将使用该函数连接到使用netmiko的设备,在调用该函数后,一切都正常工作,我打印thread.active_count(),我可以看到每次单击按钮时计数都在增加,在我的监视器上,我也可以看到越来越多的ram被消耗。
那么,有没有一种方法可以清理这些线程,并保持最初的8?
Here is a pic
我所期望的是保持最初的8个线程后,按钮被点击,如果这是可能的
2条答案
按热度按时间ia2d9nvy1#
使用
threading
模块和tkinter
库创建简单GUI应用程序的示例。应用程序使用多个线程执行设备连接。输出
fykwrbwg2#
由于您可以检查有多少 * 活动线程 * 正在执行,您可以使用该信息来禁用创建新线程,如下所示:
或者使用一个全局变量来存储线程是否被创建: