在处理预定作业时获取反馈

时间:2015-06-25 16:56:40

标签: python job-scheduling apscheduler

我想开展工作,但由于工作时间很长,我想知道他们在执行过程中的处理时间。也就是说,执行程序将定期返回其进度,而不会结束它正在执行的作业。 我曾尝试使用APScheduler执行此操作,但似乎调度程序只能接收EVENT_JOB_EXECUTED或EVENT_JOB_ERROR等事件消息。

执行工作时是否可以从执行人那里获取信息?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为,在APScheduler中没有特别支持。这个要求已经出现了很多次,最好的解决方案将取决于您的需求。一些可能性:

工作状态字典

最简单的解决方案是使用普通的python字典。将密钥作为工作的密钥,将值设置为您需要的任何状态信息。如果每个作业只有一个副本同时运行(max_instances=1),这个解决方案最有效。如果你需要一些结构来表明你的状态信息,我就是这个名字的粉丝。然后,您要么将字典保存为邪恶的全局变量,要么将其传递给每个工作函数。

但是有一些缺点。除非您删除状态信息,否则状态信息将永久保留在字典中。如果你在工作结束时将其删除,那么你就无法阅读完成的工作'状态,否则你必须确保监控状态的任何东西肯定会检查并清除每个工作。如果你有一套合理规模的工作/钥匙,这当然不是什么大问题。

自定义词典

如果你需要一些额外的功能,你可以像上面那样做,但是亚类dict(或者UserDict或MutableMapping,depending on what you want)。

的Memcached

如果您有一个可以使用的memcached服务器,将状态报告存储在memcached中非常有用,因为它们可以自动过期,并且应该可以全局访问您的应用程序。一个可能 - 次要的缺点是,如果内存信息耗尽内存,则可以从memcached服务器中清除状态信息,因此您无法保证信息可用。

更主要的缺点是,这确实需要您提供memcached服务器。如果您可能有或没有可用的,可以使用dogpile.cache并选择当时适用的后端。

其他

Pieter关于使用回调函数的评论值得注意。如果您知道自己需要哪种状态信息,但是您不确定自己最终会如何存储或使用它,那么将包装器传递给您的工作就可以轻松使用不同的状态信息。后来的后端。

但是,一如既往,要小心过度设计您的解决方案。如果你想要的只是一个报告说" 20/133项目已处理",一个简单的字典就足够了。