• R语言多线程运算(解决R循环慢的问题)【转载】


    已经大半年没有更新博客了。。最近都跑去写分析报告半年没有R

    这次记录下关于R循环(百万级以上)死慢死慢的问题,这个问题去年就碰到过,当时也尝试过多线程,but failed......昨天试了下,终于跑通了,而且过程还挺顺利

    step1

    先查下自己电脑几核的,n核貌似应该选跑n个线程,线程不是越多越好,线程个数和任务运行时间是条开口向下的抛物线,最高点预计在电脑的核数上。detectCores( )检查当前电脑可用核数  我的是4所以step2选的是4

    library(parallel)
    cl.cores <- detectCores()

    step 2

    多线程计算

    setwd("C:\Users\siyuanmao\Documents\imdada\0-渠道投放和新人券联动模型\测算")
    options(scipen=3)  ##取消科学计数法
    channel_ad_ios_data<-seq(0,50000,5000)
    channel_ad_android_data<-seq(0,100000,10000)

    library(parallel)

    func <- function(n){#n=1
      result_data<-read.csv("发券方案.csv",stringsAsFactors=FALSE)
      total_coupon_solution_data<-read.csv("结果表框架.csv",stringsAsFactors=FALSE)
      coupon_solution_data<-subset(result_data,solution== paste('方案',n,sep=""))
     
      for (i in 1:11){#i=3
        coupon_solution_data$channel_ad_cost[3]<-5000*(i-1)
        
        for (j in 1:11){#j=5
          coupon_solution_data$channel_ad_cost[4]<-10000*(j-1)
          solution_mark<-paste('方案',n,i,j,sep="-")
          coupon_solution_data$solution<-solution_mark
          
          total_coupon_solution_data<-rbind(total_coupon_solution_data,coupon_solution_data)
        }
      }
      print(solution_mark)
      return(total_coupon_solution_data)
    }

    #func(10)
    system.time({
    x <- 1:7776
    cl <- makeCluster(4) # 初始化四核心集群
    results <- parLapply(cl,x,func) # lapply的并行版本
    res.df <- do.call('rbind',results) # 整合结果
    stopCluster(cl) # 关闭集群
    })


    df=as.data.frame(res.df)

    原来非多线程的时候,我预计要跑12个小时以上,电脑发出呼呼~~的响声,查了下Python循环会快点,然后改为python版(已经很久没有用了,连个range都不会写,摸索了大半天才改好,但是速度还是慢==),于是改成多线程,运行25分钟就出结果了~~
    ---------------------
    作者:小酥饼maomao
    来源:CSDN
    原文:https://blog.csdn.net/u011454283/article/details/77920833
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    这仅仅是一份工作
    和老总之间的对话
    假设满足怎样的条件,就不去编程
    那都是别人的架构
    程序员狂想曲
    学点经济学知识(三)
    一起来看 HTML 5.2 中新的原生元素 <dialog>
    动态配置页面 之 组件系统
    初识JavaScript EventLoop
    webpack+vue-cli+ElementUI+vue-resource 前端开发
  • 原文地址:https://www.cnblogs.com/purple5252/p/11193040.html
Copyright © 2020-2023  润新知