2011-06-20 7 views
3

Je reçois beaucoup d'exceptions "IOError: Socket closed" de amqplib.client_0_8.method_framing.read_method lorsque j'exécute mes machines Céleri avec l'option --pool = eventlet. Je vois également beaucoup d'exceptions de timeout depuis eventlet.hubs.hub.switch.Beaucoup d'erreurs de socket avec les tâches de l'eventlet céleri

J'utilise un script async_manage.py similaire à celui de https://gist.github.com/821848, les travaux en cours d'exécution comme:

./async_manage.py celeryd_detach -E --pool=eventlet --concurrency=120 --logfile=<path> 

Est-ce un problème connu, ou est-il un problème avec ma configuration ou la configuration? Je cours djcelery 2.2.4, Django 1.3, et l'événement 0.9.15.

+1

êtes-vous que vos tâches ne font pas les appels de blocage? – asksol

+0

Je suis singe patcher tous, mais je ne suis pas sûr à 100% que rien ne bloque. Quelle est la meilleure façon de savoir, et que puis-je faire s'ils le sont? –

+0

singe ne corrigeant que les patchs que l'eventlet sait comment patcher, donc vous pouvez toujours utiliser des bibliothèques qui ne sont pas couvertes par cela. Voir ici par exemple: http://unethicalblogger.com/2010/08/28/unclog-the-tubes-blocking-detection-in-eventlet.html – asksol

Répondre

5

Le problème était un effet secondaire d'un code qui bloquait. J'ai réussi à détecter le code de blocage en utilisant l'option d'événement décrite dans http://unethicalblogger.com/2010/08/28/unclog-the-tubes-blocking-detection-in-eventlet.html

Il y avait 2 endroits où le blocage se produisait: les recherches DNS, et l'accès à la base de données MySQL. J'ai réussi à résoudre le premier en installant le paquet dnspython, et le second en utilisant l'option mon MySQLdb sans papier dans eventlet:

import eventlet 
eventlet.monkey_patch() 
eventlet.monkey_patch(MySQLdb=True) 
Questions connexes