[英]Celery add tasks to queue when ready
我是Celery的新手。 我正在嘗試使分散的任務與芹菜一起工作。
可以說我在任務文件task.py
有一個任務:
@celery.task
def generate_sorts(params,meta_data_dict):
'''
This will generate some sorts .
'''
pass
作為分布式處理的一部分,我正在做以下事情:
taskset = TaskSet(
tasks.generate_sorts.subtask(args = (params, meta_data_dict))
for meta_data_dict in chunk_generator)
print "Dispatching tasks"
taskset_result = taskset.apply_async()
print "Waiting for results"
results = taskset_result.join_native()
print "Results:"
#Process the results.
現在,chunk_generator基本上是一種生成器模式,它會進入數據庫並獲取一些元數據。 現在我的問題是這些任務在最終發送到任務隊列之前已經積累。 在實際將任務添加到隊列之前,我的生成器大約需要30分鍾來獲取所有元數據。 我知道這就是TaskSet
打算執行的。 我正在尋找TaskSet
替代方案,即我將能夠以分布式方式執行以下等效操作。
pool.imap_unordered(generate_sorts, chunk_generator)
生成器產生結果后,上述方法將立即執行generate_sots。 換句話說,除了TaskSet
,還有什么替代TaskSet
,我可以在生成器產生第一份工作后立即從生成器中添加,而不必等到生成器獲取所有內容后才開始做一些工作。
您應該嘗試立即啟動它們,並將AsyncResult
的結果實例添加到ResultSet
:
from celery.result import ResultSet
result_set = ResultSet()
for meta_data_dict in chunk_generator:
# Add the task to the queue immediately
result = task.generate_sorts.delay(params, meta_data_dict)
result_set.add(result)
print "Waiting for results"
results = result_set.join_native()
print "Results:"
# Process the results
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.