【发布时间】:2012-05-15 15:05:41
【问题描述】:
我正在开发一个实时数据采集器。我有一个 while True 循环,在其中,我生成了执行相对较小任务的线程(我正在通过 HTTP 查询第 3 方 API,为了实现快速并行查询)。
每个线程都负责更新特定的数据系列。这可能需要 2、3 甚至 5 秒。但是,我的 while True 循环产生线程的速度可能比线程完成所需的时间要快。因此,我需要生成的线程等待它们之前的线程完成。
一般来说,线程需要多长时间才能完成是无法预测的,因为线程会查询 HTTP 服务器...
我正在考虑为每个线程创建一个命名信号量,然后如果为特定系列生成的线程发现以前的线程在同一系列上工作,它将等待。
我能看到的唯一问题是线程可能积压..
这里最好的解决方案是什么?我应该研究像芹菜这样的东西吗?我目前正在使用线程模块。
谢谢!
【问题讨论】:
-
如果任务受 CPU 限制,那么由于 GIL,使用线程不会给您带来性能优势。
-
如果你有并行数据但没有队列,那么你做错了。您应该有一些工作人员从一个队列中获取他们的输入(即要下载的一个 url)并将他们的结果(下载的数据)放入另一个队列中。其他工作人员可以使用此队列进一步处理数据等等。
标签: python multithreading celery