使用Celery(python)和RabbitMQ将任务结果保存到特定的文件位置?



嘿伙计们,我正在为学校的一个项目制作原型(我是一名研究助理,所以这不是一个分级项目(。 我正在服务器集群(有 48 个工作线程/核心(上运行芹菜,该集群已经设置并正常工作。 我的项目的概括是,我们希望使用芹菜来处理相当多的文件/任务。

正因为如此,我们将结果保存到实际文件中非常重要,我们有大量的数据,并且在运行传统任务队列/后端时它不适合 RAM。

无论如何。。。 我的原型(带有简单的添加功能(:

task.py

from celery import Celery
app=Celery()
@app.task
def mult(x,y):
return x*y

当我执行时,这很有效:$ celery worker -A task -l info

但是如果我尝试添加新的后端:

from celery import Celery
app=Celery()
app.conf.update(CELERY_RESULT_BACKEND = 'file://~/Documents/results')
@app.task
def mult(x,y):
return x*y

我得到一个相当大的错误:

[2017-08-04 13:22:18,133: CRITICAL/MainProcess] Unrecoverable error: 
AttributeError("'NoneType' object has no attribute 'encode'",)
Traceback (most recent call last):
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/kombu/utils/objects.py", line 42, in __get__
return obj.__dict__[self.__name__]
KeyError: 'backend'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/bartolucci/anaconda3/lib/python3.6/site-        packages/celery/worker/worker.py", line 203, in start
self.blueprint.start(self)
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/celery/bootsteps.py", line 115, in start
self.on_start()
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/celery/apps/worker.py", line 143, in on_start
self.emit_banner()
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/celery/apps/worker.py", line 158, in emit_banner
' n', self.startup_info(artlines=not use_image))),
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/celery/apps/worker.py", line 221, in startup_info
results=self.app.backend.as_uri(),
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/kombu/utils/objects.py", line 44, in __get__
value = obj.__dict__[self.__name__] = self.__get(obj)
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/celery/app/base.py", line 1183, in backend
return self._get_backend()
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/celery/app/base.py", line 902, in _get_backend
return backend(app=self, url=url)
File "/home/bartolucci/anaconda3/lib/python3.6/site-packages/celery/backends/filesystem.py", line 45, in __init__
self.path = path.encode(encoding)
AttributeError: 'NoneType' object has no attribute 'encode'

我只进入这个项目 2 天,以前从未使用过芹菜(或类似的库((我来自算法、数学方面的围栏(。 我目前正在与芹菜的用户指南文档争论,但老实说,它们在这个细节上非常稀疏。

非常感谢任何帮助,谢谢。

在此处查看文件系统支持的结果后端的芹菜代码。 https://github.com/celery/celery/blob/master/celery/backends/filesystem.py#L54

您的路径需要从 file:///开始(3 个斜杠( 您的设置以 file://(2 个斜杠(开头

您可能还希望使用绝对路径而不是 ~。

相关内容

  • 没有找到相关文章