当前位置: 首页 > 知识库问答 >
问题:

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

拓拔俊德
2023-03-14

我使用一个队列从另一个线程接收任务,然后一个接一个地完成它。线程模块根据磁盘上的文件创建事件将项目放入队列,主线程应该按照先进先出的原则逐个处理添加到队列中的文件。处理一个任务/文件可能需要几秒到一分钟。

我面临的问题是,与使用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个答案

黄彬
2023-03-14

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

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

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

公冶弘壮
2023-03-14

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

你是用< code > if _ _ name _ _ = ' _ _ main _ _ ':守护主块吗?

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

 类似资料:
  • 错误:------崩溃开始 08-04 05:53:11.807 266 7-2667/com.example.kwei.minigame1 E/AndroidRuntime:致命异常:main process:com.example.kwei.minigame1,PID:2667 java.lang.nullpointerException:试图在com.example.kwei.minigam

  • 问题内容: 嗨,下面的Javascript是在我提交表单时调用的。它首先从文本区域分割一堆网址,然后: 1)在表格中为每个网址添加行,并在最后一列(“状态”列)中显示“未开始”。 2)再次循环遍历每个URL,首先它进行ajax调用以检查状态(status.php),该状态将返回0到100之间的百分比 。3)在同一循环中,它通过ajax启动实际过程(process.php),当进程完成时(请记住连续

  • 问题内容: 背景 我正在客户端使用HTTP流(服务器推送)情况下的响应。尽管服务器可以通过关闭响应来关闭连接,但是客户端也需要这样做。 问题 客户端在一个单独的线程中处理,如下所示: 因此,当我从发起连接的线程进行调用时(重要的信息是它与处理输入的线程不同),该调用将无限期挂起。我什至把它留了一夜,它仍然挂着。即使打电话也无济于事。 有什么建议吗? 问题答案: 在没有可用字节的情况下,如果不更改读

  • 我对RxJava并不完全陌生,但我被一项看似简单的任务所阻碍。 我有一个数据源,它公开了一个反应式API,我所要做的就是获取一些数据,返回它,并在没有其他消息发出时自动关闭连接。 这是我的代码: conn.query()和conn.close()在不同的调度程序中异步执行。此代码不起作用,因为conn.close()返回一个没有订阅服务器的Completable。此外,如果我手动订阅doOnCom

  • 说明 获取当前所有排队号码列表 请求地址 http://api.dc78.cn/Api/wwlist 请求方式 GET 请求参数 URL参数 描述 无 POST参数 描述 无 返回 { "status": 1, "name": "凤凰广场店", "list": [ { "id": "8", "time": "2014-11-26 11:42:12", "type": "C", "num": "C0