python开发调度去
代码如下:
from celery import Celery
from celery.schedules import crontab
import datetime
#这个类放配置信息
class Config():
broker_url = 'redis://127.0.0.1/1' #这个代表本地redis 的 1 数据库,做为celery的发布端
result_backend = 'redis://127.0.0.1/2' #这个代表本地redis 的 2 数据库,做为celery的返回端
timezone = 'Asia/Shanghai'
beat_schedule = {
'任务名字':{
'task':'celery01.func', #这里写要执行的方法,因为是在py文件下的,所以需要带py文件名称
'schedule':crontab() #这里代表什么时候执行,如果不写就代表默认一分钟一次
},
'日报-每天执行一次': {
'task': 'celery01.daily', # 这里写要执行的方法,因为是在py文件下的,所以需要带py文件名称
'schedule': crontab(minute='10', hour='0') #每天凌晨10分钟开始执行
},
'周报-每周执行一次': {
'task': 'celery01.weekly', # 这里写要执行的方法,因为是在py文件下的,所以需要带py文件名称
'schedule': crontab(minute='30', hour='0', day_of_week=1) #每周一凌晨30分钟开始执行,这里0代表周日,1代表周一 ...
}
}
#固定写法
app = Celery('tasks') #实例化app
app.config_from_object(Config) # 加载配置项
#这个方法就是被调起来的程序
#加一个装饰器
@app.task
def func():
print(datetime.datetime.now())
#日报函数
@app.task
def daily():
pass
#周报函数
@app.task
def weekly():
pass
执行代码
1.启动任务发布端
celery -A server beat
2.启动结果返回端
celery -A server worker
错误提示:
如果发生如下错误:
解决方法:
把celery 版本改为5.0.5 然后执行以下步骤
1.pip install eventlet
2.在代码文件里加入os.environ.setdefault(‘FORKED_BY_MULTIPROCESSING’,‘1’)
3.然后执行celery -A server worker -l info -P eventlet替换原来的celery -A server worker