Python多进程和并行执行与结果文件写入

时间:2018-06-14 03:51:25

标签: python-3.x multiprocessing rpy2

这是我的R代码。

resultFuntion<-function(var1,var2){
      path<-"/home/uvionicstech/Desktop/R_TENS/"
      source(paste(path,'rtest.R',sep=''))
      n<-1000
      value<-rnorm(n)
      sum=var1+var2
      rtest_out<-rtest(100,200)
      result<-value*sum*rtest_out
      return (result)
    }

RTEST ---&GT;用于添加2个整数的函数

尝试使用rpy2从python调用此R函数,并将结果写入单独的文件中。

这是我的python代码。

import rpy2.robjects as ro
import numpy as np
import time
from joblib import Parallel
from multiprocessing import Process, Queue
var1=2
var2=31
output_location='/Desktop/pro1/'
path="/Desktop/R_TENS/"
def Analysis(var1,var2):
    r=ro.r
    r.source(path+"file.R")
    p=r.resultFuntion(var1,var2)
    filename1=str(i)+"output.txt"
    newfile=output_location+filename1
    with open (str(newfile),'w') as file:      
       file.write('result: %s for {}'.format(i) %(p))
    return p
    file.close()


threads=[]

for i in range(20):
    q = Queue()
    t1=Process(target=Analysis,name='thread{}'.format(i),args=(var1,var2))
    t1.start()
    Parallel(n_jobs=20, verbose=0,backend="threading")
    threads.append(t1)
    print('{} has started \n'.format(t1.name))

for i in threads:   # to know threads used
    i.join()

此过程并行运行。因为所有文件都是同时写的。然后我尝试将输入作为json文件和一些其他R函数用于某些分析报告。这个文件编写过程需要花费很多时间。所以并行处理的优势就不在这里。对于写入20个文件大约需要75秒。我的新R函数包含许多for循环。我已将其转换为foreach循环以进行并行处理。但是我在python中的rpy2库工作不正常。有人知道json文件无法使用这种方法吗?

0 个答案:

没有答案