- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要实现监控和取消队列中已经在运行的作业的能力。
有很多关于删除 QUEUED 作业的答案,但没有针对已经运行的作业。
情况是这样的:我有一份“工作”,它由数据库中的数十万行组成,需要针对 Web 服务逐一查询。
需要提取每一行,针对 Web 服务进行查询,存储响应并更新其状态。
我已经将其用作命令(从控制台启动/输出到控制台),但现在我需要实现队列以允许从更多用户那里堆积更多作业。
到目前为止,我已经看到了 Horizon(由于缺少进程控制库,它无法在 Windows 上运行)。然而,在周围看到的一些演示中,它缺少(我相信)我需要的一些东西:
我还考虑了将 EACH REQUEST 生成为新作业的选项,而不是将“作业”视为整个行集合(这将克服超时问题),但这会给我一个地平线“待处理作业”列表每个作业数十万条记录,这会杀死浏览器(我知道 Redis 可以毫不费力地处理这个问题)。此外,我猜不可能取消“属于 X 标签的所有作业”。
我一直在考虑使用 API 路由、启 Action 业并将其与应用分离,但我发现这需要 fork 流程。
为了能够取消,我将实现一个带有 job_id 的数据库,当用户点击 API 取消作业时,我会将其标记为“已暂停”。在每个循环中,我都会检查它的状态,如果它发现“已停止”,则会自行终止。
如果我遗漏了任何方面,请大声疾呼,我会添加或澄清。
所以我在这里寻求建议,因为我是 Laravel 的新手:我怎样才能做到这一点?
最佳答案
所以我终于想出了这个(有点笨拙)的解决方案:
在 Controller 中:
public function cancelJob()
{
$jobs = DB::table('jobs')->get();
# I could use a specific ID and user owner filter, etc.
foreach ($jobs as $job) {
DB::table('jobs')->delete($job->id);
}
# This is a file that... well, it's self explaining
touch(base_path(config('files.halt_process_signal')));
return "Job cancelled - It will stop soon";
}
在作业类中(在 model::chunk()
函数内)
# CHECK FOR HALT SIGNAL AND [OPTIONALLY] STOP THE PROCESS
if ($this->service->shouldHaltProcess()) {
# build stats, do some cleanup, log, etc...
$this->halted = true;
$this->service->stopProcess();
# This FALSE is what it makes the chunk() method to stop looping
return false;
}
在服务类中:
/**
* Checks the existence of the 'Halt Process Signal' file
*
* @return bool
*/
public function shouldHaltProcess() :bool
{
return file_exists($this->config['files.halt_process_signal']);
}
/**
* Stop the batch process
*
* @return void
*/
public function stopProcess() :void
{
logger()->info("=== HALT PROCESS SIGNAL FOUND - STOPPING THE PROCESS ===");
$this->deleteHaltProcessSignalFile();
return ;
}
它看起来不太优雅,但它确实有效。我浏览了整个网络,很多人选择了 Horizon 或其他不适合我的工具。如果谁有更好的实现方式,欢迎分享。
关于queue - (Laravel 5) 监控并可选地取消队列中已经运行的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56860668/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!