0

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

我面临的问题是,与使用 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 方法在处理项目“一”之前开始处理项目“二”。

4

2 回答 2

0

如果我没记错的话,你创建的线程比你想象的要多!

你在用 守卫主街区if __name__=='__main__':吗?

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

于 2013-04-25T18:14:35.797 回答
0

您正在将列表附加到l. 这就是导致错误的原因。

l.append(outl[a:b])制作列表的outl一部分并将该列表添加到l

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

于 2013-04-25T18:27:15.893 回答