以编程方式停止 PlayFramework 作业

Posted

技术标签:

【中文标题】以编程方式停止 PlayFramework 作业【英文标题】:Programmatically stop a PlayFramework Job 【发布时间】:2013-08-18 23:08:22 【问题描述】:

我正在尝试以编程方式停止 PlayFramework 中正在运行的作业。当作业运行时,我保存它在启动时返回的“承诺”对象。这个对象有一个“取消”方法,应该取消计划的作业或停止现有的作业,但它似乎没有做任何事情。

还有什么其他方法可以停止正在运行的作业?

【问题讨论】:

【参考方案1】:

我认为您需要自己实施有序取消。 cancel 不仅会结束线程的执行,因为这可能会导致不希望的结果。解决方案也类似,Thread.stop() 已被弃用,而应使用Thread.interrupt()

检查作业是否偶尔被取消。如果您在循环中运行大量计算,请检查它是否仍应在开始时继续运行。您甚至可以通过这种方式返回部分结果。

【讨论】:

问题是 PlayFramework 中的“作业”本身不是一个线程,我需要从它运行的线程外部中断它。我不想实现“检查它是否应该运行”类型的模式,因为如果它由于某种原因卡在循环中,它可能不会退出。在那里,中断异常会更成功。 @Iv4n 你到底在使用什么 Job 和 Future/Promise 实现? java、scala、play1、play2 和 akka 有很多不同的。如果您使用的是 Play 2.x,那么如果您担心卡在循环中,应该有一些方法可以在超时的情况下运行期货。 我使用的是 Play 1.x - 仅限 Java。 我遇到了类似的情况,不幸的是不得不求助于“检查”类型的模式。我的必须处理从浏览器取消作业,考虑到我们的网站已加载平衡,我想不出一种方法来确保将取消发送到正确的 Web 服务器。 “如果由于某种原因陷入循环”这句话让我感到害怕,您可能需要花一些时间思考为什么您会陷入这样的循环并在此循环之前进行检查。

以上是关于以编程方式停止 PlayFramework 作业的主要内容,如果未能解决你的问题,请参考以下文章

Sidekiq 停止一项正在运行的作业

以编程方式终止 Spark 作业

如何以编程方式设置 Cron 作业?

如何以编程方式创建新的 cron 作业?

如何以编程方式创建新的 cron 作业?

以编程方式安排解析后台作业