gpt4 book ai didi

php - 在 php 中捕获 beanstalkd DEADLINE_SOON 事件

转载 作者:行者123 更新时间:2023-12-04 06:31:47 27 4
gpt4 key购买 nike

我在我的项目中使用 Beanstalkd 消息队列进行 ffmpeg 处理视频。我用 pheanstalk beantalkd 队列的 PHP 客户端。我的 worker 看起来像:


...
// get latest job
$job = $this->pheanstalk->reserve();
// get the data from the job
$jobData = unserialize($job->getData());
// process job, giving a result
$result = $this->task($jobData);
if ($result) {
// success = delete
$this->pheanstalk->delete($job);
} else {
// failed = bury
$this->pheanstalk->bury($job, 1024);
}
...

在 task() 方法中,我使用 smth 像:

// video processing
$processVideo = 'ffmpeg -vpre libx264-max -y -i inputfile ...';
shell_exec($processVideo);
// taking screenshots from video
...

如您所知,视频处理可能需要很长时间,有时会超过预定义的作业 ttr (运行时间)。这样,作业会收到超时事件并再次返回队列。我同时多次运行我的工作人员以进行异步处理。所以下一个自由 worker 试图接受未完成的工作。最后,我在一个视频文件下有两个或多个进程。
我想,我可以定义很长 ttr ,但这不是一个好的设计。我注意到,beanstalkd 有 DEADLINE_SOON 事件。但我不知道,如何在我的 worker 中捕捉它。我需要它才能使用 "touch" command .

你有什么建议吗?

最佳答案

根据mailing list message ( this thread 的一部分),' DEADLINE_SOON ' 消息只有在您提出保留请求时才会被发回,当作业的 TTR 即将到期时。

如果您保留一份工作,并且正在处理它(而不是收集许多其他工作),您将不会看到截止日期消息 - 您不是在寻找它,如果是,那么您可能不会首先处理文件。

将 TTR 设置视为第二次机会,如果 worker 有问题并且没有问题 touchdelete它接手的工作。将超时设置至少与您期望的处理时间一样长,然后添加更多作为安全余量。为一个复杂的 Action 等待一段时间,而不是一遍又一遍地在同一个 Action 上失败。如果您将 TTR 设置得太低,您将继续获得相同的文件,并且您将继续让 TTR 过期。

关于php - 在 php 中捕获 beanstalkd DEADLINE_SOON 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326227/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com