gpt4 book ai didi

mysql - Ruby 中的并行 mysql I/O

转载 作者:行者123 更新时间:2023-11-29 12:17:34 28 4
gpt4 key购买 nike

祝你有美好的一天。我正在编写一个 cron 作业,希望将一个巨大的 MySQL 表拆分为多个线程并对其进行一些工作。这是我目前拥有的最小样本:

require 'mysql'
require 'parallel'
@db = Mysql.real_connect("localhost", "root", "", "database")
@threads = 10

Parallel.map(1..@threads, :in_processes => 8) do |i|
begin
@db.query("SELECT url FROM pages LIMIT 1 OFFSET #{i}")
rescue Mysql::Error => e
@db.reconnect()
puts "Error code: #{e.errno}"
puts "Error message: #{e.error}"
puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
end
end
@db.close

线程不需要返回任何东西,它们获得自己的工作份额并执行它。只是他们不这样做。查询期间与 MySQL 的连接丢失,或者连接不存在(MySQL 服务器已经消失?!),或者 没有为 Mysql::Result 类定义 _dump_data,然后 Parallel::DeadWorker.

如何正确地做到这一点?

最佳答案

map 方法需要一个结果;我不需要结果,所以我切换到each:

Parallel.each(1..@threads, :in_processes => 8) do |i|

这也解决了 MySQL 的问题:我只需要在并行进程内启动连接。当使用 each 循环时,这是可能的。当然,连接也应该在进程内关闭。

关于mysql - Ruby 中的并行 mysql I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29529566/

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