J'ai une lourde classe de bibliothèque externe qui prend du temps pour s'initialiser et consomme beaucoup de mémoire. Je veux le créer une fois par instance de la tâche, au minimum.est Celery Tâche initialisée par chaque processus de travail, ou une fois par application?
class NlpTask(Task):
def __init__(self):
print('initializing NLP parser')
self._parser = nlplib.Parser()
print('done initializing NLP parser')
@property
def parser(self):
return self._parser
@celery.task(base=NlpTask)
def my_task(arg):
x = my_task.parser.process(arg)
# etc.
Céleri commence 32 processus de travail, donc j'attendre les "initializing ... done"
32 fois l'impression, comme je suppose qu'une instance de tâche est créé pour chaque travailleur. Étonnamment, je reçois l'impression une fois. Qu'est-ce qui se passe réellement là? Merci.
c'est mon point - je m'attendrais une fois par travailleur, et il semble qu'une fois par instance de céleri. J'ai édité la question – davka
@davka Mis à jour la réponse. – ChillarAnand