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

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如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像