python - 芹菜不启动任务python django
问题描述
我的应用程序不调用 celery 任务
我的设置.py:
CLICKHOUSE_HOST = '127.0.0.1'
CLICKHOUSE_PORT = '6379'
CELERY_BROKER_URL = 'redis://' + CLICKHOUSE_HOST + ':' + CLICKHOUSE_PORT + '/0'
CELERY_BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 60}
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = "Australia/Tasmania"
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
这是referal_app目录中的init .py:
from __future__ import absolute_import
from .celery import app as celery_app
__all__ = ('celery_app',)
这是我必须调用芹菜任务的观点:
class DefineView(View):
def get(self, request):
create_points.delay(1, 2)
return render(request, 'main/homepage.html', {})
这是我的任务(只是测试工作):
from celery import shared_task
from referal_app.celery import app
@shared_task
def create_points(a, b):
with open('e:\\txt.txt', 'w') as file:
for _ in range(1):
file.write(f'{a + b}')
return 1
这是referal_app目录中的芹菜设置:
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'referal_app.settings')
app = Celery('referal_app')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
当我启动 celery 时,我看不到函数 lounching 这是celery -A referal_app worker -l INFO
命令输出:
[tasks]
. main.tasks.create_points
. referal_app.celery.debug_task
[2021-05-28 19:42:52,266: INFO/MainProcess] celery@DESKTOP-LM7RKH1 ready.
[2021-05-28 19:42:52,745: INFO/MainProcess] Received task: referal_app.celery.debug_task[e42e42e2-a3d2-4721-ae37-a35abfe31ca6]
[2021-05-28 19:42:52,747: INFO/MainProcess] Received task: main.tasks.create_points[22d35a11-de3e-4b68-8777-7e4b8756c3bd]
[2021-05-28 19:42:53,870: INFO/MainProcess] Received task: main.tasks.create_points[2211846f-7be7-49c1-9628-d4806fbd4bc0]
[2021-05-28 19:42:53,872: INFO/MainProcess] Received task: referal_app.celery.debug_task[181a599b-5b3b-4e7d-96f7-03f5a7a7d2f0]
[2021-05-28 19:42:54,329: INFO/SpawnPoolWorker-11] child process 11056 calling self.run()
[2021-05-28 19:42:54,337: INFO/SpawnPoolWorker-12] child process 11676 calling self.run()
[2021-05-28 19:42:54,338: INFO/SpawnPoolWorker-9] child process 6560 calling self.run()
[2021-05-28 19:42:54,342: INFO/SpawnPoolWorker-10] child process 16992 calling self.run()
解决方案
你需要启动芹菜过程
运行这个命令来测试 celery(你需要把这个命令运行到 Django 项目目录中)
celery -A <django_project> worker -l info
如果一切正常,那么您就可以在生产中供应芹菜了
我建议使用supervisor,让我们安装那个 install supervisor
sudo apt-get install supervisor
现在创建一个配置文件
sudo nano /etc/supervisor/conf.d/<app>.conf
这是示例(这里我使用 miniconda)
[program:celery]
command=/home/<user>/miniconda3/envs/venv/bin/celery -A <django_project> worker -l info
directory=<django_project>
user=<user>
group=www-data
autostart=true
autorestart=true
stdout_logfile=/<log_dir>/log/access.log
redirect_stderr=true
numprocs=3
priority=998
最后,使用此命令更新主管
sudo supervisorctl reread
sudo supervisorctl update
运行以下命令来停止、启动和/或检查 celery 程序的状态(此处为应用名称 celery)
sudo supervisorctl stop celery
sudo supervisorctl start celery
sudo supervisorctl status celery
推荐阅读
- javascript - AngularJS - 如何使用 .js 调用另一个 html 页面
- java - 打印堆栈跟踪说“警告”而不是“错误”
- relationship - EER图中的多对多关系,N:M vs N:M
- python - 如何将一个元组分成两个独立的列表?
- vert.x - 如何在 vert.x 中执行长阻塞操作?
- javascript - 在角度材料中选择 mat-option 时调用 ngmodelchange
- influxdb - 如何拆分标签键和标签值
- c - 函数调用中指向 const 的指针
- authentication - ecryptfs-migrate-home 与域用户的主目录
- mysql - current_time() 的 MySQL 排序规则