Flask + RQ 实现任务队列
安装 redis-server
和 rq
。
初始设置
from flask import Flask
from rq import Queue
from redis import Redis
app = Flask(__name__)
# 创建任务队列
rq = Queue(connection=Redis())
任务加入队列
访问 http://localhost:5000/test/
就会将 delay()
函数加入到任务队列。
@app.route('/test/')
def test():
job = rq.enqueue(delay, 100)
return '任务执行中...'
def delay(sec):
time.sleep(sec)
return '完成!'
管理任务
查看任务数
len(rq)
自定义元数据
例如要给任务添加自定义名称:
job.meta['name'] = '延时测试任务'
job.save_meta()
在模板中访问自定义元数据:
{{ job.meta.name }}
获取队列中所有任务
rq.jobs
通过ID获取指定任务
任务执行完毕后,信息默认存续500秒,随后会被清空。
rq.fetch_job()
设置任务结果信息的保存时间
q.enqueue(foo) # result expires after 500 secs (the default)
q.enqueue(foo, result_ttl=86400) # result expires after 1 day
q.enqueue(foo, result_ttl=0) # result gets deleted immediately
q.enqueue(foo, result_ttl=-1) # result never expires--you should delete jobs manually