背景环境如下:
我有一个表单,用来选定时间,然后提交任务的,表单如下:
当提交表单后,服务端要等到这个时间后开始执行一些内容,所以我的服务端需要一个定时任务。 我现有的环境已经用了 celery+redis 跑一些异步任务,所以想在此基础上直接使用 celery 做定时任务,但现在遇到一些问题。
看官方文档中配置内容,定时任务时间写在了 /proj/celery.py 文件中,如下:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
from datetime import timedelta
from celery.schedules import crontab
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.update(
CELERYBEAT_SCHEDULE = {
'do-task-every-30-seconds': {
'task': 'items.taskWork.do_task',
# 'schedule': timedelta(seconds=10),
'schedule': crontab(hour=11, minute=32, day_of_month=12,month_of_year=4),
},
},
)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
其中 app.conf.update 中内容即为执行任务的时间设定。
定时任务写在了 /proj/items/taskWork.py 中
@shared_task
def do_task():
print ('run by celery 23333~~~ dddddddd')
那么,按照这样的设定,我每增加一个任务,难不成都得生成一条app.conf.update
的内容到 /proj/celery.py 中?这个怎么看怎么不合理的感觉。
我也翻了 django-crontab 内容,然后发现它这个是把定时任务写到 setting.py 文件中。若我每次生成一个人也得每次写一条记录到 setting.py 中,也貌似不怎么合理。而且我目前项目没有去用 django-admin 内容的,所以没法用 django-admin 中的 crontab 功能。
所以,类似这种,经常添加定时任务的内容,要怎么操作? 假设在 django+celery+redis 环境下要怎么操作?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.