我正在关注here上的教程,以便在我的django项目中定义任务。
文章建议使用以下格式的celery.py
文件:
from celery import Celery
from celery.schedules import crontab
app = Celery()
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls test('hello') every 10 seconds.
sender.add_periodic_task(10.0, my_task.s('hello'), name='add every 10')
)
@app.task
def my_task(arg):
print(arg)
哪个有效。现在这很好,但我不想在本地定义我的任务。我的问题是,如何从其他应用程序添加任务?
我创建了一个名为my_proj
的空白项目,它有两个应用:my_proj
和app_with_tasks
。上面的celery.py
文件位于my_proj
应用程序目录的根级别,我想从app_with_tasks
的{{1}}文件中添加定期任务。
我在tasks.py
设置文件的已安装应用中列出了app_with_tasks
,但我仍然无法将任何内容从应用导入到其他内容。
我的理解是我应该使用:
my_proj
但from app_with_tasks.tasks import task1
将在PyCharm中显示为未解析的引用。
答案 0 :(得分:1)
我会告诉你我在用什么。也许它可以帮到你
my_proj / celery.py
import os
import celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_proj.settings')
app = celery.Celery('app_django')
app.config_from_object('django.conf.settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
然后在app_with_tasks中添加文件tasks.py
from my_proj.celery import app
from django.apps import apps
@app.task(bind=False)
def your_task(some_arg):
A_Model = apps.get_model('my_proj', 'A_Model')
....
启动celery服务器的命令(每次更改任务以重新加载tasks.py文件时重启)
/path/to/virtualenv/bin/celery --app=my_proj.celery:app --loglevel=INFO --concurrency=4 -n default_worker worker
调用任务(这里你应该使用你的add_periodic_task代码)
from app_with_tasks.tasks import your_task
your_task.apply_async(args=[123], kwargs=None)