首页 > 解决方案 > 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。

https://github.com/Hontiris1/IPPing

标签: pythonmultithreadingclassobject

解决方案


因为您没有将值添加tthread_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语句。否则打印一次后退出。whilerunthread 0


推荐阅读