Python多线程无法正常工作

时间:2019-11-30 03:01:15

标签: python multithreading class object

我似乎无法让此多线程代码与我已经结构化的Python脚本(具有简单IP固定脚本以及其他一些功能)一起使用。

在测试了多线程代码之后,尽管我已经准备好在代码上实现,但是我似乎无法正确调用新线程。我知道这是因为,如果多线程正常工作,那么在按下GUI界面上的“扫描所有IP”按钮后执行scanall()函数时,我的GUI界面将不会停止响应。

完成实施后,我也再也没有出现错误,因此现在很难知道该如何进行。非常感谢您的帮助,我很乐意解决这个问题!

这是多线程代码:

    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

1 个答案:

答案 0 :(得分:0)

因为您没有将class CustomViewCell: UITableViewCell { @IBOutlet weak var catImageView: UIImageView! private var task: URLSessionDataTask? override func prepareForReuse() { super.prepareForReuse() task?.cancel() catImageView.image = nil } func configureWith(url string: String) { guard let url = URL(string: string) else { return } task = URLSession.shared.dataTask(with: url) { (data, response, error) in if let data = data, let image = UIImage(data: data) { DispatchQueue.main.async { self.catImageView.image = image } } } task?.resume() } } 的值添加到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之后退出。