2014-02-20 29 views
4

這似乎解決了一個非常類似的問題,但並沒有給我足夠的洞察力:https://github.com/celery/billiard/issues/101聽起來像嘗試非SQLite數據庫可能是一個好主意...Django 1.6 + RabbitMQ 3.2.3 + Celery 3.1.9 - 爲什麼我的芹菜工人死亡:WorkerLostError:工人過早退出:信號11(SIGSEGV)

我有一個簡單的芹菜設置與我的Django應用程序。在我settings.py文件我設置爲運行如下任務:

CELERYBEAT_SCHEDULE = { 
    'sync_database': { 
     'task': 'apps.data.tasks.celery_sync_database', 
     'schedule': timedelta(minutes=5) 
    } 
} 

我按照這裏的說明:http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html

我能夠打開兩個新的終端窗口,並運行芹菜流程如下:

ONE - 這是需要計劃任務,並把任務隊列中的芹菜拍過程:

PROMPT> celery -A myproj beat 
celery beat v3.1.9 (Cipater) is starting. 
__ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://[email protected]:5672// 
    . loader -> celery.loaders.app.AppLoader 
    . scheduler -> djcelery.schedulers.DatabaseScheduler 

    . logfile -> [stderr]@%INFO 
    . maxinterval -> now (0s) 
[2014-02-20 16:15:20,085: INFO/MainProcess] beat: Starting... 
[2014-02-20 16:15:20,086: INFO/MainProcess] Writing entries... 
[2014-02-20 16:15:20,143: INFO/MainProcess] DatabaseScheduler: Schedule changed. 
[2014-02-20 16:15:20,143: INFO/MainProcess] Writing entries... 
[2014-02-20 16:20:20,143: INFO/MainProcess] Scheduler: Sending due task sync_database (apps.data.tasks.celery_sync_database) 
[2014-02-20 16:20:20,161: INFO/MainProcess] Writing entries... 

TW Ø - 芹菜工人,這應該接受這個任務從隊列中並運行它:

PROMPT> celery -A myproj worker -l info 

-------------- [email protected] v3.1.9 (Cipater) 
---- **** ----- 
--- * *** * -- Darwin-13.0.0-x86_64-i386-64bit 
-- * - **** --- 
- ** ---------- [config] 
- ** ---------- .> app:   myproj:0x1105a1050 
- ** ---------- .> transport: amqp://[email protected]:5672// 
- ** ---------- .> results:  djcelery.backends.database:DatabaseBackend 
- *** --- * --- .> concurrency: 4 (prefork) 
-- ******* ---- 
--- ***** ----- [queues] 
-------------- .> celery   exchange=celery(direct) key=celery 


[tasks] 
    . apps.data.tasks.celery_sync_database 
    . myproj.celery.debug_task 

[2014-02-20 16:15:29,402: INFO/MainProcess] Connected to amqp://[email protected]:5672// 
[2014-02-20 16:15:29,419: INFO/MainProcess] mingle: searching for neighbors 
[2014-02-20 16:15:30,440: INFO/MainProcess] mingle: all alone 
[2014-02-20 16:15:30,474: WARNING/MainProcess] [email protected] ready. 

當任務被髮送,然而,似乎時間大約50%的工人運行任務和其他50%的時間我得到以下錯誤:

[2014-02-20 16:35:20,159: INFO/MainProcess] Received task: apps.data.tasks.celery_sync_database[960bcb6c-d6a5-4e32-8267-cfbe2b411b25] 
[2014-02-20 16:36:54,561: ERROR/MainProcess] Process 'Worker-4' pid:19500 exited with exitcode -11 
[2014-02-20 16:36:54,580: ERROR/MainProcess] Task apps.data.tasks.celery_sync_database[960bcb6c-d6a5-4e32-8267-cfbe2b411b25] raised unexpected: WorkerLostError('Worker exited prematurely: signal 11 (SIGSEGV).',) 
Traceback (most recent call last): 
    File "/Users/jon/dev/vpe/VAN/lib/python2.7/site-packages/billiard/pool.py", line 1168, in mark_as_worker_lost 
    human_status(exitcode)), 
WorkerLostError: Worker exited prematurely: signal 11 (SIGSEGV). 

我正在開發運行小牛的Macbook Pro。

芹菜版本3.1.9 的RabbitMQ 3.2.3 的Django 1.6

請注意,我用的Django的芹菜3.1.9並啓用了djcelery應用。

回答

0

當我從SQLite切換到PostgreSQL時,問題消失了。