使用Python向队列递归添加字符串
我正在使用python读取一个包含一些单词的文件,将所有项目添加到队列中,然后使用使用Python向队列递归添加字符串,python,multithreading,queue,Python,Multithreading,Queue,我正在使用python读取一个包含一些单词的文件,将所有项目添加到队列中,然后使用doWork()方法执行操作a。我试图弄清楚,如何将a操作中执行的结果添加回同一队列,以便再次对结果本身执行a。一旦q为空,循环就需要停止,因为操作a可能返回结果,也可能不返回结果 我希望这有点道理P concurrent = 20 def doWork(): while True: word = q.get() lol = getStatus(word)
doWork()
方法执行操作a
。我试图弄清楚,如何将a
操作中执行的结果添加回同一队列,以便再次对结果本身执行a
。一旦q
为空,循环就需要停止,因为操作a
可能返回结果,也可能不返回结果
我希望这有点道理P
concurrent = 20
def doWork():
while True:
word = q.get()
lol = getStatus(word)
q.task_done()
def getStatus(word):
#results another word on which this operation has to be performed.
q = Queue(concurrent * 2)
for i in range(concurrent):
t = Thread(target=doWork)
t.daemon = True
t.start()
try:
for words in open('words.txt' ,'r'):
q.put(words.strip())
q.join()
except KeyboardInterrupt:
sys.exit(1)
为什么不让
getStatus
首先递归地执行操作?为什么要让队列参与其中?一旦队列为空,它将加入
,除非您已经插入了新的项目(否则队列不会知道更多)。您是否尝试在doWork
或getStatus
中将内容放入队列?您是否试图避免从工作线程内部调用q.put()。为什么不直接调用q.put(get_status(word))我不同意Ofer Sadan的建议,因为如果一个单词在后代单词的数量上有一个广泛的子图,那么您可能会饿死其他线程。顺便说一句,是getStatus阻塞吗?因此,由于某种原因,当我尝试从doWork()函数调用q.put()时,程序在几次迭代后停止。我不能从getStatus调用它,因为我不确定它将如何影响多个线程,并且可能会饿死。