2013-05-12 5 views
0

Я использую сельдерей с интеграцией Django. Я обнаружил некоторые проблемы с новой фиксацией в моем текущем проекте: работник сельдерей с банком gevent отказался выполнять новые задачи. После короткого расследования, я обнаружил, что «караул» войти обработчик вызывает проблему: settings.py:Сельдерейский работник с gevent pool + Sentry logger = hang

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'formatters': { 
     'verbose': { 
      'format': '%(levelname)s %(asctime)s %(module)s '\ 
         '%(process)d %(thread)d %(message)s' 
     }, 
     'gunicorn_style': { 
      'format': CELERYD_TASK_LOG_FORMAT, 
      }, 
    }, 
    'handlers': { 
     'console':{ 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'formatter': 'gunicorn_style' 
     }, 
     'mail_admins': { 
      'level': 'ERROR', 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler' 
     }, 
     'sentry': { 
      'level': 'WARNING', 
      'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', 
     } 
}, 
'loggers': { 
    'django.request': { 
     'handlers': ['mail_admins'], 
     'level': 'ERROR', 
     'propagate': True, 
    }, 
    'raven': { 
     'level': 'INFO', 
     'handlers': ['console'], 
     'propagate': False, 
    }, 
    'sentry.errors': { 
     'level': 'INFO', 
     'handlers': ['console'], 
     'propagate': False, 
     }, 
    } 
} 
... 
#I want verbose logs only for my apps 
for i in MY_APPS: 
    LOGGING['loggers'][i] = { 
          'handlers': ['console', 'sentry'], 
          'level': CONSOLE_LOGLEVEL, 
          'propagate': False, 
          } 
LOGGING['loggers']['celery'] = { 
          'handlers': ['sentry'], 
          'level': CONSOLE_LOGLEVEL, 
          'propagate': True, 
          } 
... 

С «обработчиков»: [ «консоль»] все работает отлично, но когда я добавить «караул» обработчик Работник celer + gevent начинает вести себя следующим образом: возьмите N заданий от брокера, где N - уровень параллелизма, а затем остановится.

бегаю сельдерея работника с этой командой:

python manage.py celery worker -Q celery_gevent -P gevent -c 20  

Примечание: deathlock показывает с параллелизмом> = 3

$ pip freeze 
Django==1.5 
Fabric==1.6.0 
South==0.7.6 
amqp==1.0.9 
anyjson==0.3.3 
argparse==1.2.1 
billiard==2.7.3.22 
celery==3.0.16 
cssselect==0.8 
distribute==0.6.24 
django-appconf==0.6 
django-celery==3.0.11 
django-geoip==0.3 
django-nose==1.1 
django-redis==3.2 
flower==0.5.0 
gevent==0.13.8 
greenlet==0.4.0 
gunicorn==0.17.2 
ipython==0.13.1 
kombu==2.5.7 
logilab-astng==0.24.2 
logilab-common==0.59.0 
lxml==3.1.1 
nose==1.2.1 
paramiko==1.10.0 
progressbar==2.3dev 
psycopg2==2.4.6 
pycrypto==2.6 
pylint==0.27.0 
pymongo==2.4.2 
python-dateutil==1.5 
pytz==2013b 
raven==3.2.0 
redis==2.7.2 
requests==1.0.4 
six==1.3.0 
tornado==3.0.1 
wsgiref==0.1.2 

Я использую RabbitMQ в качестве брокера и Redis в качестве результата бэкэндом

Спасибо.

P.S. синхронизации рабочих сельдерея прекрасно работает с любой конфигурацией

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^