可扩展、高性能异步任务调度器
aioscheduler的Python项目详细描述
AIO调度程序
aioscheduler是一个可伸缩的、高性能的asyncio任务调度器。在
它在单个任务中的特定时间调度协同程序的执行,通过为多个调度程序添加一个管理器,使其轻量级和可伸缩性极强。在
测试表明,当使用20个调度程序时,aioscheduler可以运行多达1000万个定时任务,每秒最多完成20次。单个任务可以轻松安排多达10000个任务。这是基于对Xeon E5 1650v3的测试。在
安装
pip install aioscheduler
使用
aioscheduler提供了几个调度程序类,这些类运行一个主任务来使用协同程序。在
有QueuedScheduler/LifoQueuedScheduler
和{
默认情况下,TimedScheduler将datetime对象与UTC进行比较,若要禁用它,请将prefer_utc=False
传递给构造函数。在
importasynciofromdatetimeimportdatetime,timedeltafromaioschedulerimportTimedSchedulerasyncdefwork(n:int)->None:print(f"I am doing heavy work: {n}")asyncdefmain()->None:starting_time=datetime.utcnow()scheduler=TimedScheduler()scheduler.start()foriinrange(60):scheduler.schedule(work(i),starting_time+timedelta(seconds=5+i))awaitasyncio.sleep(65)asyncio.run(main())
在本例中,60个任务计划从现在起在5秒内运行,其中1个任务在1分钟内每秒运行一次。在
QueuedScheduler的工作原理相同,但按调度顺序立即消耗任务,并且只接受一个协程作为schedule()
的参数。在
为了进一步扩展,aioscheduler提供了管理器(例如QueuedScheduler后端):
^{pr2}$管理器在内部跨多个调度程序分配任务,并充当负载平衡器。在
schedule()
返回任务对象,您可以在调度后通过运行scheduler.cancel(task)
(或manager.cancel(task)
)来取消任务。经理取消合同的效率较低。在
为了限制计划的任务量,有一个max_tasks
参数,它采用正整数。建议在已知任务队列大小的生产环境中使用它,并在调度器和管理器上都可用。在
许可证
麻省理工学院
- 项目
标签: