重写arq并进行改进。
rearq的Python项目详细描述
重新起动
简介
rerq是一个具有asyncio和redis的分布式任务队列,它从arq重写并进行了改进。在
安装
只需从pypi安装:
> pip install rearq
或从github安装最新代码:
^{pr2}$快速入门
任务定义
# main.pyrearq=ReArq()@rearq.on_shutdownasyncdefon_shutdown():print("shutdown")@rearq.on_startupasyncdefon_startup():print("startup")@rearq.task(queue="myqueue")asyncdefadd(self,a,b):returna+b@rearq.task(cron="*/5 * * * * * *")# run task per 5 secondsasyncdeftimer(self):return"timer"
运行rearq WORK
> rearq worker main:rearq -q myqueue
2020-06-04 15:37:02 - rearq.worker:92 - INFO - Start worker success with queue: myqueue 2020-06-04 15:37:02 - rearq.worker:84 - INFO - redis_version=6.0.1 mem_usage=1.47M clients_connected=25 db_keys=5
运行rearq计时工
如果有计时任务,请同时运行另一个命令:
> rearq worker -t main:rearq
2020-06-04 15:37:44 - rearq.worker:346 - INFO - Start timer worker success with queue: myqueue 2020-06-04 15:37:44 - rearq.worker:84 - INFO - redis_version=6.0.1 mem_usage=1.47M clients_connected=25 db_keys=5
集成在FastAPI
app=FastAPI()@app.on_event("startup")asyncdefstartup()->None:awaitrearq.init()@app.on_event("shutdown")asyncdefshutdown()->None:awaitrearq.close()# then run task in view@app.get("/test")asyncdeftest():job=awaitadd.delay(args=(1,2))returnjob.info()
为什么不是arq
感谢arq
的出色工作,但该项目现在不太活跃,而且缺乏维护。另一方面,我不喜欢arq
及其api的一些解决方案,所以我打开这个项目,希望能更好地工作。在
有什么区别
Api
受celery
的启发,rerq提供了更友好的api来添加register和add task。在
后桥:
rearq=Rearq()@rearq.task()asyncdefadd(self,a,b):returna+bjob=awaitadd.delay(args=(1,2))print(job)
咨询请求:
classWorkerSettings:functions=[add]redis_settings=RedisSettings(**settings.ARQ)asyncdefadd(ctx,a,b):returna+bawaitarq.enqueue_job('add',1,2)
队列实现
Arq使用redis zset
生成延迟队列和定时队列,使用zset
和{
文件
请参阅https://rearq.long2ice.cn中的文档。在
谢谢
- arq,使用asyncio和redis的python中的快速作业队列和RPC。在
许可证
此项目是根据MIT许可证授权的。在
- 项目
标签: