疑问1:-
我目前正在使用芹菜执行异步任务。目前在我的电脑中,该函数传递给 8 个工人。
我想知道处理每个工人的结果需要多少时间。
另外,我听说在芹菜中,for 循环和打印语句不起作用,这是真的吗?
疑点2:-
我最初在我的 Django 项目之外尝试过芹菜,现在我想融入我的 Django 项目。我已经看到有一个单独的过程来设置芹菜,尤其是在 Django 中。如果我在我的 Django 项目中使用我以前的普通芹菜东西,它能工作吗,还是我必须以 Django 的方式做,比如创建__int__.py文件等,..?
我维护了一个task.py,views.py我将从任务中导入该函数,并在 views.py 中编写了一个单独的函数,该函数使用 delay(( 函数将数据传递给task.py 以异步运行它。
关于你的疑问2:
你是对的,在你init.py
中添加芹菜是必不可少的:
# __init__.py
from __future__ import absolute_import, unicode_literals
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app
__all__ = ['celery_app']
另一个重要的项目(至少在我如何学习使用Celery方面(是将celery.py
添加到项目文件夹并添加类似于以下内容的内容。这些也可以添加到您的settings.py
中,但我喜欢分离。
# celery.py
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', 'your_project.settings')
app = Celery('your_project')
# Using a string here means the worker don'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()
最后,您的settings.py
将能够理解您的芹菜命令。如果使用此格式,则芹菜命令需要CELERY_作为前缀。我的示例与利用后端服务器来容纳芹菜动作有关。在这里,我将展示如何利用 Redis 进行此类活动。我的生产示例适用于我目前在 Heroku 上托管的一个项目。
# settings.py
# Celery
# For Development and local Redis server
# CELERY_BROKER_URL = 'redis://localhost:6379'
# CELERY_RESULT_BACKEND = 'redis://localhost:6379'
# For Production
CELERY_BROKER_URL = os.environ['REDIS_URL']
CELERY_RESULT_BACKEND = os.environ['REDIS_URL']