我正在使用Celery编写数据处理管道,因为这样可以大大加快速度。
考虑以下伪代码:
from celery.result import ResultSet from some_celery_app import processing_task # of type @app.task def crunch_data(): results = ResultSet([]) for document in mongo.find(): #Around 100K - 1M documents job = processing_task.delay(document) results.add(job) return results.get() collected_data = crunch_data() #Do some stuff with this collected data
我成功启用了并发功能,产生了四个工作器,当我运行此脚本时,将对数据进行相应的处理,并且我可以做任何我想做的事。
我将RabbitMQ用作消息代理,并将rpc
用作后端。
打开RabbitMQ管理界面时看到的内容:
results.get()
调用来检索文档。我的问题:是否可以同时进行处理和后续检索?就我而言,由于所有文档都是彼此不依赖的原子实体,因此似乎无需等待作业被完全处理。
答案 0 :(得分:0)
您可以尝试在ResultSet.get(callback=cbResult)
中使用callback参数,然后可以在回调中处理结果。
def cbResult(task_id, value):
print(value)
results.get(callback=cbResult)