Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python和MySQL中的简单队列系统并行调整大量图像的大小_Python_Mysql_Transactions_Message Queue - Fatal编程技术网

使用Python和MySQL中的简单队列系统并行调整大量图像的大小

使用Python和MySQL中的简单队列系统并行调整大量图像的大小,python,mysql,transactions,message-queue,Python,Mysql,Transactions,Message Queue,我有一个非常大的需要重新调整大小的图像列表,存储在MySQL数据库中 我有几台机器专门用于调整图像大小: - MySQL Database - Worker node - Worker node - Worker node - File server 我试图在每个连接到中央MySQL服务器的工作节点上创建一个程序,并获取一个用于重新调整大小的图像,然后将该图像保存在文件服务器上。重新调整大小完成后,将从重新调整大小队列中删除图像 我面临的问题是:如何处理并发性?如果每个工作节点同时连接到MyS

我有一个非常大的需要重新调整大小的图像列表,存储在MySQL数据库中

我有几台机器专门用于调整图像大小:

- MySQL Database
- Worker node
- Worker node
- Worker node
- File server
我试图在每个连接到中央MySQL服务器的工作节点上创建一个程序,并获取一个用于重新调整大小的图像,然后将该图像保存在文件服务器上。重新调整大小完成后,将从重新调整大小队列中删除图像

我面临的问题是:如何处理并发性?如果每个工作节点同时连接到MySQL服务器,那么它们可能会同时提取相同的记录,从而无法并行运行这些作业。是否有一种方法可以“锁定”一行以确保每个工作人员都获得唯一的记录

这样做的好策略是什么?还是有更好的办法


提前感谢。

从来没有机会面对这个问题。以下任何一项都有效吗

  • 有一个进程从队列中提取图像,并将作业发送给可用的辅助进程
  • 如果工作人员的工作效率相同,则使用图像id或某种统一的哈希来平均分配工作负载
  • 每个工作者随机抽取一个未经处理的图像
    • 一些想法:

    • 通过向表中添加一个字段来标记在数据库中获取的每条记录,您可以在开始记录时选中/标记该字段
    • 让每个工作人员处理一个特定的记录子集,可能是修改id之类的
    • 如果你经常这样做(或者有其他类似的任务),也许考虑一个消息/任务队列,例如RabBMQ+CeleR.
    • 。 将“正在工作”字段添加到图像表中。括起在BEGIN TRANSACTION和END TRANSACTION语句中选择和更新一条记录的过程。在两者之间的工作节点上执行操作。