python - Python多线程无法正常工作
问题描述
我似乎无法让这个多线程代码与我已经结构化的 Python 脚本一起工作,该脚本是一个具有一些其他功能的简单 IP Pining 脚本。
在测试了多线程代码之后,虽然我已经准备好在我的代码上实现,但是我似乎无法正确调用新线程。我知道这一点是因为如果多线程工作正常,我的 GUI 界面不会在按下 GUI 界面上的 Scan all IPs 按钮后执行 scanall() 函数时停止响应。
完成实施后,我也不再出现错误,所以现在很难知道该怎么做。这非常令人沮丧,谢谢你们的帮助,我很想解决这个问题!
这是多线程代码:
class ThreadManager:
"""Multi Threading manager"""
def __init__(self):
pass
def start(self, threads):
thread_refs = []
for i in range(threads):
t = MyThread(i) # Thread(args=(1,)) # target=test(),
t.daemon = True
print('starting thread %i' % i)
t.start()
for t in thread_refs:
t.join()
class MyThread(Thread):
"""Multi Threading"""
def __init__(self, i):
Thread.__init__(self)
self.i = i
def run(self):
while True:
print('thread # {}'.format(self.i))
time.sleep(.25)
break
这是执行多线程的代码:
print("[Debug] Main Thread has been started")
self.manager = ThreadManager()
self.manager.start(1)
这是整个脚本代码和多线程实现的 Github。
解决方案
因为您没有将值添加t
到thread_refs
数组中。它是空的并且不等待线程加入。
像这样改变你start
的功能:
def start(self, threads):
thread_refs = []
for i in range(threads):
t = MyThread(i) # Thread(args=(1,)) # target=test(),
t.daemon = True
print('starting thread %i' % i)
t.start()
thread_refs.append(t)
for t in thread_refs:
t.join()
其次,您可能希望从函数的循环中删除该break
语句。否则打印一次后退出。while
run
thread 0
推荐阅读
- java - 无法在 Java 中将代理身份验证与 Https 一起使用
- xml - XSLT 替换存在于另一个元素值中的元素
- javascript - Babel - 导出 es 模块时的不同转译结果
- mstest - MSTest.exe 抛出“调用的目标已抛出异常。”
- angular - Angular 5 *ngIf 指令对构造函数中的布尔变量表现得很奇怪
- php - 如何在 Windows 上为 ffmpeg stdin/stderr 配置 proc_open “管道”?
- session - Electron - 在同一应用程序的多个窗口中共享相同的 IndexedDB
- gcc - 奇怪的错误 - 链接到自己的库 gcc 时未定义的引用
- django - Django 表单清理数据
- c# - 将 DataTable 数据绑定到 DataGrid - 代码隐藏