我正在使用队列从另一个线程接收任务并逐个完成。线程模块根据磁盘上的文件创建事件将项目放入队列中,主线程应该逐个处理文件,因为它们以先进先出的方式添加到队列中。处理一个任务/文件可能需要几秒到一分钟。
我面临的问题是,与以同步方式使用queue.get()逐个处理队列项相反,有时,多个并发进程以异步方式启动。代码如下:
#code in main thread
q = Queue.Queue(0)
while True:
qItem = q.get()
do_something_with(qItem) # this may take few seconds to minutes
#code in other thread
items = ['one', 'two', 'three']
for item in items:
q.put(item)
以上代码应该处理项目"一个"然后"两个"然后"三"。在我的实际程序中发生了什么,do_something_with方法开始处理项目"两个"在处理项目之前"一个"完了。
答案 0 :(得分:0)
如果我没弄错的话,你创造的线程比你想象的更多!
您是否使用if __name__=='__main__':
保护主要区块?
否则,您可能只是创建了比您意识到的更多的线程,并且他们可能正在消耗队列中的项目。
答案 1 :(得分:0)
您要将一个列表附加到l
。这就是造成错误的原因。
l.append(outl[a:b])
对列表outl
进行切片并将该列表添加到l
使用l.extend(outl[a:b])