php - 通过长队列运行多个工作人员

标签 php mysql queue

我有一个很长的 mysql 队列。我有 1 个处理每个队列的工作脚本。

但是当这个 worker 正在运行时,数据库可能会更新或获得新的行插入。

示例工作脚本

get_current_queue = SELECT from queue...

while(get_current_queue) {

update_current_row_from_queue "processing"

//some cpu intensive processing here that takes varying amount of time.

}

问题是工作脚本需要不同的时间量,具体取决于给定时间队列的长度,以及每个 cpu 处理需要多长时间(为 ex 转换视频)。

因此,当我在第一个工作脚本运行时运行另一个工作脚本时,队列数据库中尚未被第一个工作人员标记为“正在处理”的队列将落入第二个工作人员的待办事项列表中。

我不知道如何解决这个问题。

当一个 worker 运行时,我需要一些方法来标记这个批处理,以便只有这个 worker 会运行它。

当它运行时,在插入新行后,如果我选择启动另一个 worker,它就可以工作。

最佳答案

在表队列中为当前正在处理该行的工作人员 ID 分配一个字段。

首先执行 update queue set worker_id = myid Where worker_id = '' LIMIT 100 然后 select * from queue where worker_id = myid 并处理这些行。 毕竟从队列中删除这些行或将它们标记为已处理。

当您的一名工作人员在通过将 worker_id 设置回“”来解锁未处理的行时死亡时,您可能需要某种回退来应对这种情况。

关于php - 通过长队列运行多个工作人员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2046955/

相关文章:

php - 使用 PHP 导出为 CSV 并显示超链接单元格

php - 用另一个表的平均值更新一个表 - MySQL

mysql - 如何在一个sql查询中有三个计数并在mySQL中显示3个单独的结果?

mysql - Sequelize : not able to login via localhost?

php - 从远程主机使用 google app engine 发送电子邮件,如何附加文件?

javascript - 将变量传递到下一页,无需表单或 URL 扩展

mysql - 显示 2 没有连接的总和

animation - 带队列的 CSS3 过渡

python - 将队列传递给 ThreadedHTTPServer

Java 和队列 : saturation issues with multithreaded I/O