首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在supervisord无法发现任务的情况下运行celery

在supervisord无法发现任务的情况下运行celery
EN

Stack Overflow用户
提问于 2018-01-14 21:09:47
回答 2查看 1K关注 0票数 2

我使用的是带有Django-1.11和supervisor 3.3.1的celery 4.1.0。由于某些原因,当我通过supervisor运行celery worker时,celery无法发现应用程序中的任务(在INSTALLED_APPS中列出)。当我从命令行运行celery时,它会显示任务。例如,当我从命令行运行celery时,输出如下:

从命令行运行:

/home/ubuntu/Env/ oba /bin/celery worker -A oba -l调试

代码语言:javascript
复制
- ** ---------- .> transport:   amqp://***:**@localhost:***//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . celery.accumulate
  . celery.backend_cleanup
  . celery.chain
  . celery.chord
  . celery.chord_unlock
  . celery.chunks
  . celery.group
  . celery.map
  . celery.starmap
  . contact.tasks.send_email_to_admin_for_member
  . contact.tasks.send_email_to_admin_for_visitor

但是当通过supervisord运行时,celery的输出是:

代码语言:javascript
复制
- ** ---------- .> transport:   amqp://***:**@localhost:***//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . celery.accumulate
  . celery.backend_cleanup
  . celery.chain
  . celery.chord
  . celery.chord_unlock
  . celery.chunks
  . celery.group
  . celery.map
  . celery.starmap

supervisord的配置如下所示:

代码语言:javascript
复制
[program:celery]
command=/home/ubuntu/Env/oba/bin/celery -A oba worker -l DEBUG
environment=PATH="/home/ubuntu/Env/oba/bin"
directory=/home/ubuntu/oba
autostart=true
autorestart=true
startretries=3
stdout_logfile=/var/log/celery/%(program_name)s.log
stdout_logfile_maxbytes=50MB
stderr_logfile=/var/log/celery/%(program_name)s.log
stderr_logfile_maxbytes=50MB
user=celery
numprocs=1
process_name=%(program_name)s-%(process_num)s

有趣的是,在尝试检查已注册的任务时,我看到:

主页/ubuntu/Env/ oba /bin/celery -A oba检查已注册

代码语言:javascript
复制
-> celery@ubuntu-512mb-xxx: OK
    - empty -

我在myproject/oba/celery.py中的celery.py如下所示:

代码语言:javascript
复制
from __future__ import absolute_import
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'oba.settings')

from django.conf import settings

app = Celery('oba')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

我在contact/tasks.py中声明了我的任务:

代码语言:javascript
复制
@shared_task
def send_email_to_admin_for_visitor(contactus_visitor_id):
       pass

我不确定为什么它不能自动发现任务。有什么线索吗?

EN

回答 2

Stack Overflow用户

发布于 2018-01-14 22:23:38

Celery 4.1的doc有所不同:

代码语言:javascript
复制
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

与的不同之处在于app.autodiscover_tasks()的lambda函数

如果这还不能解决你的问题,也许你需要展示你是如何声明你的芹菜任务的。

票数 0
EN

Stack Overflow用户

发布于 2019-06-24 09:11:06

我以前遇到过这个问题。我的问题是我用来启动celery worker的用户(这里是"celery")没有对我的应用程序的正确访问权限。这意味着用户看不到app文件夹中的任务。

检查您的应用程序目录的权限,并将正确的权限授予您的用户或使用已有权限的用户启动您的应用程序目录,工作人员应解决此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48249893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档