#django #rabbitmq #celery #django-celery #twython
#джанго #rabbitmq #сельдерей #django-сельдерей #twython
Вопрос:
У меня был проект Django, в котором соединение TwythonStreamer было запущено на рабочем устройстве задачи сельдерея. Соединение запускается и перезагружается при изменении условий поиска. Однако в его текущем состоянии и до обновления проекта до Celery 3.1.1 он будет SIGSEGV при попытке запуска этой конкретной задачи. Я могу выполнить те же команды задачи в оболочке Django и заставить ее работать просто отлично:
tu = TwitterUserAccount.objects.first()
stream = NetworkStreamer(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET, tu.twitter_access_token, tu.twitter_access_token_secret)
stream.statuses.filter(track='foo,bar')
однако с запущенным RabbitMQ / Celery (в то время как в virtualenv проекта) в другом окне:
celery worker --app=project.app -B -E -l INFO
и попытайтесь запустить:
@task()
def test_network():
tu = TwitterUserAccount.objects.first()
stream = NetworkStreamer(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET, tu.twitter_access_token, tu.twitter_access_token_secret)
в оболочке Django через:
test_network.apply_async()
следующая ошибка SIGSEVG возникает в окне Сельдерея (при инициализации сетевого потока):
Task project.app.tasks.test_network with id 5a9d1689-797a-4d35-8bf3-9795e51bb0ec raised exception:
"WorkerLostError('Worker exited prematurely: signal 11 (SIGSEGV).',)"
Task was called with args: [] kwargs: {}.
The contents of the full traceback was:
Traceback (most recent call last):
File "/Users/foo_user/.virtualenvs/project/lib/python2.7/site-packages/billiard/pool.py", line 1170, in mark_as_worker_lost
human_status(exitcode)),
WorkerLostError: Worker exited prematurely: signal 11 (SIGSEGV).
NetworkStreamer — это просто унаследованный TwythonStreamer (как показано здесь).
У меня есть другие задачи сельдерея, которые отлично выполняются в дополнение к различным задачам сельдерея. выполняется djcelery.setup_loader() и т.д. Я пытался настроить различные настройки (думал, что это могла быть проблема с рассолом), но я даже не передаю никаких параметров. Эта структура проекта заключается в том, как настраивается Сельдерей, присваивается имя и т. Д…
BROKER_URL = 'amqp://'
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
CELERY_RESULT_ENGINE_OPTIONS = {"echo": True}
CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_BACKEND = 'amqp'
# Short lived sessions, disabled by default
CELERY_RESULT_PERSISTENT = True
CELERY_RESULT_BACKEND = 'amqp'
CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours.
CELERY_SEND_TASK_ERROR_EMAILS = True
Версии:
- Python: 2.7.5
- RabbitMQ: 3.3.4
- Django==1.6.5
- amqp ==1.4.5
- бильярд ==3.3.0.18
- сельдерей ==3.1.12
- django-celery ==3.1.10
- цветок == 0.7.0
- psycopg2==2.5.3
- pytz ==2014.4
- twython==3.1.2
Комментарии:
1. Из
amqp
документации:This library should be API compatible with librabbitmq
. Убедитесь, что это так.