python队列在当前完成之前跳转到下一个项目

时间:2013-04-25 17:44:41

标签: python multithreading queue

我正在使用队列从另一个线程接收任务并逐个完成。线程模块根据磁盘上的文件创建事件将项目放入队列中,主线程应该逐个处理文件,因为它们以先进先出的方式添加到队列中。处理一个任务/文件可能需要几秒到一分钟。

我面临的问题是,与以同步方式使用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方法开始处理项目"两个"在处理项目之前"一个"完了。

2 个答案:

答案 0 :(得分:0)

如果我没弄错的话,你创造的线程比你想象的更多!

您是否使用if __name__=='__main__':保护主要区块?

否则,您可能只是创建了比您意识到的更多的线程,并且他们可能正在消耗队列中的项目。

答案 1 :(得分:0)

您要将一个列表附加到l。这就是造成错误的原因。

l.append(outl[a:b])对列表outl进行切片并将该列表添加到l

使用l.extend(outl[a:b])