[Python] Celery task e subtasks in parallelo

Karim lemieliste a gmail.com
Ven 14 Lug 2017 10:00:12 CEST


Ciao lista, non riesco a capire come posso usare un task di celery per
chiamare dei subtasks in parallelo.

Ho un server che crea 4 workers e usa redis come broker.

Il codice e’ pressapoco questo:

*# accounts_grouped equivale ad una lista con liste di n accounts*
*# [[account1, account2], [account3, account4] (….) ]*


*for accounts_group in​ ​accounts_grouped:*
*​  ​ # preso dagli esempi sul sito Celery*


*    g = group(fetch_​data_for.s(account.id <http://account.id>) for
account in ​accounts_grouped​)()    result_of_group = g.get()
total_​data​_created += res​​ult_of_group*


*return total_data_created​*



​Io vorrei che i `​fetch_
​data
_for` venissero eseguiti in parallelo e messi in coda nei vari workers.

Ho provato questo codice, ma il .get mi causa error:

*RuntimeError: Never call result.get() within a task!*
*See
http://docs.celeryq.org/en/latest/userguide/tasks.html#task-synchronous-subtasks
<http://docs.celeryq.org/en/latest/userguide/tasks.html#task-synchronous-subtasks>*


​Localmente funzionava, ma localmente non ho esattamente la stessa
configurazione che ho online.

​Penso che raggruppare gli account per fare gruppi di n non sia la
soluzione migliore. C’e’ un modo per eseguire il fetch_data_for come
subtasks per tutti i miei accounts?​

​Mi potete aiutare a capire come devo procedere?​

​Grazie​


​—​
Karim N. Gorjux
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20170714/ba126868/attachment.html>


Maggiori informazioni sulla lista Python