我正在将Celery与django和django-celery-beat / django-celery-results一起使用。
Celery可以正常工作,直到达到以下代码:
figure, ax = plt.subplots(figsize=(15,3))
然后退出并引述signal 11
:
[2018-09-04 19:43:21,928: ERROR/MainProcess] Process 'ForkPoolWorker-1' pid:42611 exited with 'signal 11 (SIGSEGV)'
[2018-09-04 19:43:21,962: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: signal 11 (SIGSEGV).',)
Traceback (most recent call last):
File "/Users/user/.local/share/virtualenvs/venv/lib/python3.6/site-packages/billiard/pool.py", line 1223, in mark_as_worker_lost
human_status(exitcode)),
billiard.exceptions.WorkerLostError: Worker exited prematurely: signal 11 (SIGSEGV).
知道会发生什么吗?
芹菜设置:
CACHE_LOCATION = "redis://%s:6379" % REDIS_HOST
CELERY_BROKER_URL = CACHE_LOCATION
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
版本:
台球== 3.5.0.4
celery == 4.1.0
答案 0 :(得分:0)
我知道这个问题有点老了,但是我遇到了同样的问题,并且找到了一个简单的解决方案。但是,这可能取决于您要对matplotlib
中的celery
进行处理。
如果像我一样,您有一份长期的芹菜工作,正在计算要在静态图像文件中绘制的某些值,那么我的答案应该有用。
基本上,问题出在matplotlib的后端。如您在文档https://matplotlib.org/faq/usage_faq.html#what-is-a-backend中所见,您可以选择将呈现图形的后端。您有 interactive 和 non-interactive 后端。如果像我一样,您只想绘制图形并将其保存在静态文件中,则不需要默认的 interactive 后端。
由于某些未知原因,默认后端在芹菜上不起作用,并引发了 SIGSEGV ,因此,对我有用的是在导入时指定另一个后端:
import matplotlib
matplotlib.use("Agg")
希望这会有所帮助。