我正在尝试在Heroku上部署一个应用程序,我正在使用Celery和Redis来管理后台任务。我目前有一个后台任务,它通过FTP收集数据并将其放入数据库中。我还有一个加载页面,它会定期刷新,直到任务完成。但是,我无法检索活动任务的列表(从celery.task.control检查返回None(。我尝试在本地运行它,我可以看到 Celery 收到了任务(在终端中(。我还可以看到 Celery 在启动期间通过正确的端口连接到 Redis。
我尝试重新安装几个库,并确保正确设置 settings.py 文件中的所有变量。我还尝试检查os.environ['REDIS_URL']的值,它是正确的。
来自 settings.py 的相关代码
CACHES = {
"default": {
"BACKEND": "redis_cache.RedisCache",
"LOCATION": os.environ['REDIS_URL'],
}
}
CELERY_BROKER_URL = os.environ['REDIS_URL']
CELERY_RESULT_BACKEND = os.environ['REDIS_URL']
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
celery.py:
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'genome.settings')
os.environ.setdefault('REDIS_URL', 'redis://localhost:6379/0')
app = Celery('genome_app')
app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
(在应用程序的 views.py 中(
从 celery.task.control import inspect
。
i = inspect()
active_tasks = list(i.active().values())[0]
属性错误:"NoneType"对象没有属性"值">
from celery.task.control import inspect
i = inspect()
dictfile = i.active()
details={}
properties=[]
如果你想得到参数,任务ID作为新的字典
for dictele in dictfile:
for dictloop in dictfile[dictele]:
jobid=dictloop['args']
taskid= dictloop['id']
jobid=jobid.replace("('","")
jobid=jobid.replace("',)",'')
details["jobid"]=jobid
details["taskid"]=taskid
properties.append(details)
print(properties)
您可以使用上述详细信息创建自己的任务管理器列表。
我已经遇到同样的问题一段时间了。开发人员似乎已经意识到了这一点(https://github.com/celery/kombu/issues/1081(。我发现通过尝试强制它安装旧版本的 kombu(4.5.0 现在似乎对我有用(,它暂时可以再次工作。