短期流程(即aws lambda)的具有持久性的事件调度

eventmagic的Python项目详细描述


事件魔术

event magic是一个简单的调度/事件管理包,针对aws lambda等服务。 通常,事件调度应用程序依赖于您创建对象,然后在循环中运行这些对象,因此是一个长时间运行的过程。然后,lambda出现的问题是,您需要是等幂的,所以您需要重新加载事件,并确保它们执行时丢失任何数据,如执行次数。

为了解决这个问题,event magic可以完全在内存中运行,并且有额外的功能来简单地存储和加载mysql数据库中的事件。

此外,event magic允许您指定在主事件之前执行的函数,并提供一系列“完整”标准测试,例如:

  • 直到成功(永远运行直到成功),
  • 直到x个成功执行的计数
  • 直到完成的函数返回true

事件可分为以下几类: 事件-你想做的事 计划-当你想做的时候。

挑战在于知道事件何时执行,是成功还是失败?这件事应该重演吗? 它应该重复X次还是永远?如果它需要永远重复,但只在达到某个特定的状态时才会发生呢?

这个模块是专门为在faas平台(例如aws lambda)上工作(不可知)而编写的。

我应该使用事件魔术吗?

是的,如果您在aws中有lambdas,并且您需要调度,但不想设置redis或创建更多lambdas,并且您已经有了mysql db,那么这是很好的。

发展现状

目前在alpha中,因为它并没有我最初想要的所有特性,还有一些方面需要大量的修改,比如数据库交互。一旦所有的功能都到位了,并且我已经在A.N.的其他产品中完全实现了它,它将转移到beta版。生产将视使用情况而定。也就是说,除非它不再有奇怪的问题,否则我不会说它已经准备好生产了。因此,无论是一段时间还是一系列的实现(如果您正在使用它,请告诉我/需要帮助,只需提出一张罚单即可)

设置

分贝

还没有完成这需要一个完全重写,但…实用主义。

但是现在,只需复制db_setup.sql并对数据库运行它。 要设置数据库凭据,请执行以下操作:

importeventmagiceventmagic.HOST="localhost"eventmagic.PORT="3306"eventmagic.USERNAME="root"eventmagic.PASSWORD="thisisroot"eventmagic.DATABASE="eventmagic"

创建事件

fromeventmagic.scheduleimportSchedulefromeventmagic.eventimportEvent# import datetime# import timedefoneOffFunc():"""My One off Func."""print("Hello world!")returnTrue# This event completed as soon as oneOffFunc returns trueevent=Event(oneOffFunc,until_success=True)schedule1=Schedule()schedule1.job(event)# Below is how you would set it with a datetime object# schedule1.when(datetime.datetime.now() + datetime.timedelta(seconds=2)# Sleep for 5 seconds so When is no longer in the future...# time.sleep(5)# Standard Crontabschedule1.when("* * * * *")# If it is only a one off you can simply do this and an Event object will be# created for you:schedule2=Schedule()schedule2.job(oneOffFunc)# Extended Crontabschedule2.when("* * * * * * *")# Execute once (NB This won't execute as when is set 1 min in the future)schedule1.execute()# Execute until successfulwhilenotschedule2.completed:schedule2.execute()

有关接受为crontab的内容的详细信息,请参见parse-crontab

重复事件:

fromeventmagic.scheduleimportSchedulefromeventmagic.eventimportEventdefrunForEver():"""Run for ever"""print("Hello World")returnTrueevent=Event(oneOffFunc,count=10)schedule1=Schedule()schedule1.job(event)schedule1.when("* * * * * * *")whilenotschedule1.completed:schedule1.execute()

有关详细信息,请参见example.py

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

推荐PyPI第三方库


热门话题
java如何提高我的软件项目的速度?   java将Jetty嵌入JavaSE项目   数组中的java重复字符   java我的Shell排序没有按预期工作,我需要一些帮助来找出我做错了什么   java如何在JBoss EAP6/AS7中应用先过滤后安全约束   java使用一个随机运算符来处理多个变量   java为什么我不能在文件中写我的二叉树?   java应用程序不会在Eclipse emulator上运行   我第一次尝试制作一个简单的基于瓷砖的java游戏   java为TermVectors安装Solr修补程序   java无法将更新的对象值从客户端发送到服务器,服务器读取不存在的值   Azure,java sdk,使用ARM模板部署无法转换参数文件   是否有一个Java等价于空合并运算符(?)在C#?   java如果只初始化了超类对象,是否可以调用特定于子类的方法?   向类文件传递值时出现java NullPointerException   java模不起作用   java Android TranslateAnimation动态更新布局的大小   数据结构如何在java中实例化队列对象?   java如果用户选择一些随机的相机应用程序,如何在安卓中正确处理相机意图?