从父文件夹启动 Celery Worker 时出错
Error starting Celery Worker from Parent Folder
我正在尝试在 Heroku 上部署我的 Flask 项目,但是我在从 src
以外的其他目录启动我的 Celery worker 时遇到问题。
我的 Flask project
有以下树:
.project
├── Procfile
├── README.md
├── requirements.txt
└── src
├── app.py
├── blueprints
│ ├── __init__.py
│ ├── error_pages.py
│ └── profile.py
├── static
│ └── ...
└── templates
└── ...
在app.py我有:
from flask import Flask
from celery import Celery
import blueprints
app = Flask(__name__)
# Load the config file
app.config.from_pyfile('config.cfg')
# Initialises celery background tasks handler
celery = Celery(main=app.name, backend=app.config['REDIS_URL'], broker=app.config['REDIS_URL'],
include=['blueprints.profile'])
celery.conf.update(app.config)
app.celery = celery
如果我在 .project/src
并且我使用:
celery -A app.celery worker -l INFO
我的工人开始时没有问题。
但是我无法弄清楚如何从根开始我的工人。
这就是我的 Procfile 目前的样子。
web: gunicorn --chdir ./src app:app
worker: celery -A ??????
有什么想法吗?
我通过在 src
目录中添加以下 __init__.py
解决了我的问题:
import sys
import os
# Adding the 'src' directory to the python path
sys.path.insert(0, os.path.join(os.getcwd(), 'src'))
然后调用工人使用:
celery -A src.app.celery worker -l INFO
现在,这是我的 Heroku Procfile
web: gunicorn --chdir ./src app:app
worker: celery -A src.app.celery worker
我认为你应该输入代码:
celery -A src.app.celery_file worker --loglevel=debug -B
(-B : for Beat) Celery 配置示例:
from celery import Celery
celery = Celery(__name__)
celery = Celery('tasks', broker=) # rabbit,redis, ..
celery.conf.update({'CELERY_ACCEPT_CONTENT': ['pickle', 'json', 'msgpack', 'yaml']})
celery.conf.add_defaults(...)
celery.conf.update(CELERYBEAT_SCHEDULE={
'db_connect_things': {
'task': 'application.lib.tasks.db_connect_things',
'schedule': crontab(minute=0, hour='*/12'),
}})
class ContextTask(celery.Task):
...
我正在尝试在 Heroku 上部署我的 Flask 项目,但是我在从 src
以外的其他目录启动我的 Celery worker 时遇到问题。
我的 Flask project
有以下树:
.project
├── Procfile
├── README.md
├── requirements.txt
└── src
├── app.py
├── blueprints
│ ├── __init__.py
│ ├── error_pages.py
│ └── profile.py
├── static
│ └── ...
└── templates
└── ...
在app.py我有:
from flask import Flask
from celery import Celery
import blueprints
app = Flask(__name__)
# Load the config file
app.config.from_pyfile('config.cfg')
# Initialises celery background tasks handler
celery = Celery(main=app.name, backend=app.config['REDIS_URL'], broker=app.config['REDIS_URL'],
include=['blueprints.profile'])
celery.conf.update(app.config)
app.celery = celery
如果我在 .project/src
并且我使用:
celery -A app.celery worker -l INFO
我的工人开始时没有问题。 但是我无法弄清楚如何从根开始我的工人。
这就是我的 Procfile 目前的样子。
web: gunicorn --chdir ./src app:app
worker: celery -A ??????
有什么想法吗?
我通过在 src
目录中添加以下 __init__.py
解决了我的问题:
import sys
import os
# Adding the 'src' directory to the python path
sys.path.insert(0, os.path.join(os.getcwd(), 'src'))
然后调用工人使用:
celery -A src.app.celery worker -l INFO
现在,这是我的 Heroku Procfile
web: gunicorn --chdir ./src app:app
worker: celery -A src.app.celery worker
我认为你应该输入代码:
celery -A src.app.celery_file worker --loglevel=debug -B
(-B : for Beat) Celery 配置示例:
from celery import Celery
celery = Celery(__name__)
celery = Celery('tasks', broker=) # rabbit,redis, ..
celery.conf.update({'CELERY_ACCEPT_CONTENT': ['pickle', 'json', 'msgpack', 'yaml']})
celery.conf.add_defaults(...)
celery.conf.update(CELERYBEAT_SCHEDULE={
'db_connect_things': {
'task': 'application.lib.tasks.db_connect_things',
'schedule': crontab(minute=0, hour='*/12'),
}})
class ContextTask(celery.Task):
...