Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python队列在当前项完成之前跳转到下一项_Python_Multithreading_Queue - Fatal编程技术网

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

python队列在当前项完成之前跳转到下一项,python,multithreading,queue,Python,Multithreading,Queue,我正在使用一个队列从另一个线程接收任务,并一个接一个地完成它。线程模块根据磁盘上的文件创建事件将项放入队列,主线程应该在文件以先进先出的方式添加到队列中时逐个处理这些文件。处理一个任务/文件可能需要几秒钟到一分钟 我面临的问题是,与使用queue.get()以同步方式逐个处理队列项目不同,有时,多个并发进程以异步方式启动。代码如下所示: #code in main thread q = Queue.Queue(0) while True: qItem = q.get() do_s

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

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

如果我没弄错的话,您创建的线程比您想象的要多

您是否使用
保护主块,如果


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

您正在向
l
添加一个列表。这就是导致错误的原因

l.append(outl[a:b])
在列表中创建一个片段
outl
,并将该列表添加到
l


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

您可以添加更多的代码吗?线程不是一件容易的事情,也许问题出在其他地方…?可能错误的是计时,添加队列的线程可能比正在处理队列中的项目的线程完成得慢。因此,如果您延迟“执行”线程的开始,那么这可能会有所帮助。