簡體   English   中英

芹菜准備好后將任務添加到隊列中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM