2017-08-16 1 views
1

J'ai une tâche de céleri, qui gâte une variable. Cela fonctionne parfaitement si je mets un seul ouvrier céleri, mais quand j'utilise la concurrence, tout a foiré. Comment pourrais-je verrouiller la section critique, où la variable est mutilée?Comment verrouiller une variable dans une tâche de céleri?

inb4: en utilisant Python 3.6, Redis est à la fois courtier et supporté par les résultats. threading.Lock n'aide pas ici.

Répondre

0

Tant que céleri s'exécute sur plusieurs travailleurs (processus) thread lock ne serait pas utile, car il fonctionne à l'intérieur seul processus. De plus, le verrouillage de filetage peut être utilisé lorsque vous contrôlez le processus global, tandis que le céleri n'est pas possible.

Cela signifie que le céleri nécessite un verrou distribué. Pour django, j'utilise toujours django-cache, comme dans: here. Si vous avez besoin de plus de verrous génériques, en particulier ceux basés sur Redis, vous pouvez utiliser sherlock pour n'importe quelle application python.

+0

Trébuché sur la première URL que vous avez indiqué pendant que googling, mais pour une raison quelconque, pensait qu'il y a des moyens plus faciles. Quoi qu'il en soit, sherlock a résolu le problème, merci beaucoup. – f1st