mysql - "foreach"循环 : Using all cores in R (especially if we are sending sql queries inside foreach loop)

标签 mysql r foreach multicore

我打算使用“foreach”来利用我 CPU 中的所有内核。问题是我需要在循环内发送一个 sql 查询。该脚本在正常的“for”循环中运行良好,但当我将其更改为“foreach”时出现以下错误。 错误是:

select: Interrupted system call    
select: Interrupted system call    
select: Interrupted system call    
Error in { : task 1 failed - "expired MySQLConnection"

我使用的代码是:

library(foreach)
library(doMC)
library(RMySQL)
library(multicore)
registerDoMC(cores=6)
m <- dbDriver("MySQL", max.con = 100)
con <- dbConnect(m, user="*****", password = "******", host ="**.**.***",dbname="dbname")
list<-dbListTables(con)
foreach(i = 1:(length(list))%dopar%{
  query<-paste("SELECT * FROM ",list[i]," WHERE `CLOSE` BETWEEN 1 AND 100",sep="")
  t<-dbGetQuery(con,query)
}

尽管“foreach”在我的系统中用于所有其他目的工作正常,但它仅在 sql 查询时出错。有没有办法在“foreach”循环内发送 sql 查询?

最佳答案

我的建议是: 将数据库查询移到循环之外,并锁定访问,这样您就不会进行并行数据库查询。我认为这也会加快速度,因为您将无法进行并行磁盘访问,但仍然能够进行并行处理。

含义(伪代码) db = 连接到数据库 线程锁 = 锁();

parfor{ 线程锁.lock result = db query(将所有数据拉到这里,因为在不锁定数据库的情况下加载时无法处理) 线程解锁 处理结果数据(现在只是数据,而不是 sql 对象)。

关于mysql - "foreach"循环 : Using all cores in R (especially if we are sending sql queries inside foreach loop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6407219/

相关文章:

r - 如何在 R 中为 Monte Carlo 创建更有效的模拟循环

php - 在数组中推进索引键

MySQL建表语句语法错误

mysql - 检查当前的 FOREIGN_KEY_CHECKS 值

r - 加载包时禁用消息

r - ggplot2:从 ggplot 对象创建独立副本

php - 如何找到用户之间的联系,创建一个封闭的 friend 圈?

mysql - 选择表格两次 - 不起作用

php - SQL - PHP foreach 变量 ID 外循环

java - 使用增强型 for 循环进行计数