我似乎无法让此多线程代码与我已经结构化的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。
答案 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
之后退出。