我想用python做线程。我有100个单词,想把它们放在6个不同的链接中。如果其中一个链接已经准备好,我希望该链接可以获取新单词。而其他线程仍在工作中使用第一个单词。当100个关键字完成时,我的完整程序应该被允许首先执行更多的代码。我有以下代码:
threads = []
def getresults(seed):
for link in links:
t = threading.Thread(target=getLinkResult, args = (suggestengine, seed))
threads.append(t)
for thread in threads:
thread.start()
for seed in tqdm:
getresults(seed + a)
getresults(seed + b)
for thread in threads:
thread.join()
#code that should happen after
我现在有个错误: 线程只能启动一次
您将调用
getresults
两次,两次都引用同一个全局threads
列表。这意味着,当您第一次调用getresults
时,线程将启动。当您第二次调用它们时,前面已经在运行的线程将再次调用
.start()
方法。您应该将
getresults
中的线程作为本地线程启动,然后将它们附加到全局threads
列表中。尽管您可以执行以下操作:
它不能解决这个问题,因为一个或多个线程可能已经结束,因此将重新启动,因此将导致相同的错误。
错误是明确的。你开始你的线程两次,而你不应该
当您对这些调用进行排序时,您将启动两次线程循环。为了正确地做你想做的事情,你需要做一个thread pool and a task queue。基本上,您需要处理第二个单词列表和一个互斥锁。每个线程将锁定互斥锁,读取一个单词并将其出列,然后解锁并处理该单词。
您应该只在getresults中启动新线程
相关问题 更多 >
编程相关推荐