有什么方法可以使periodic_task
仅在通话中运行,我看到django-app Pingit()
运行后,python manage.py runserver
就开始运行了
@periodic_task(run_every=crontab(minute="*/1"),options={"task_id":task_name})
def Pingit():
print('Every Minute Im Called')
仅当我通过Pingit
调用它时,我才希望它运行定期任务。
答案 0 :(得分:1)
为此,您最好使用@task
,并使其在执行后重新排队,例如:
@app.task
def pingit(count=0):
if count < 60 * 24 * 7: # 7 days in minutes
print('Every Minute Im Called')
# Queue a new task to run in 1 minute
pingit.apply_async(kwargs={'count': count + 1}, countdown=60)
# Start the task manually
pingit.apply_async()
如果需要向函数添加位置参数,则可以使用args
指定位置参数。例如,传递一个name
参数:
@app.task
def pingit(name, count=0):
if count < 60 * 24 * 7: # 7 days in minutes
print('Every Minute Im Called')
# Queue a new task to run in 1 minute
pingit.apply_async(args=[name], kwargs={'count': count + 1}, countdown=60)
# Start the task manually
pingit.apply_async(args=['MyName'])