使用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)

我正在使用python读取一个包含一些单词的文件,将所有项目添加到队列中,然后使用
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调用它,因为我不确定它将如何影响多个线程,并且可能会饿死。