可扩展、高性能异步任务调度器

aioscheduler的Python项目详细描述


AIO调度程序

aioscheduler是一个可伸缩的、高性能的asyncio任务调度器。在

它在单个任务中的特定时间调度协同程序的执行,通过为多个调度程序添加一个管理器,使其轻量级和可伸缩性极强。在

测试表明,当使用20个调度程序时,aioscheduler可以运行多达1000万个定时任务,每秒最多完成20次。单个任务可以轻松安排多达10000个任务。这是基于对Xeon E5 1650v3的测试。在

安装

pip install aioscheduler

使用

aioscheduler提供了几个调度程序类,这些类运行一个主任务来使用协同程序。在

QueuedScheduler/LifoQueuedScheduler和{},而TimedScheduler是管理器的默认设置。在

默认情况下,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参数,它采用正整数。建议在已知任务队列大小的生产环境中使用它,并在调度器和管理器上都可用。在

许可证

麻省理工学院

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将HashMap<String,Object>从一个活动传递到另一个活动   java如何手动加密socket连接的流量?   java正则表达式生成一个不正确的结果   Java方法引用具有泛型参数的方法   java app setBackground()错误:不兼容的类型:int无法转换为Drawable   java是启动Spring引导而不是SpringApplication的其他方法。跑   无法打开java类路径资源[org/quartz/impl/jdbcjobstore/tables_h2.sql],因为它不存在   spring使用Java,如何确定来自tomcat Web服务器的出站服务调用?   java获取多个同名的XML元素JAXB   java使用Ant从同一代码库构建Swing和Android应用程序   JComponent的java重绘方法不起作用   java目标不可访问,标识符“beanName”解析为null   smtp是否有支持esmtp管道的java api?   java如何在Spring中自动连接业务对象   java在Hibernate中没有其他保存实体的方法吗?   针对两个客户机的SpringJavaWeb应用程序项目开发   使用split的java标记化输入