多线程数据处理推荐语言
目前,我使用Python和R这两种语言来处理所有的数据需求。不过,有些数据集非常大,使用多线程处理会大大提高效率。
举个例子,如果有两个步骤需要在几百万条数据上执行,我希望在第一个步骤还在进行的时候,就能开始第二个步骤,利用已经处理过的部分数据。
根据我的理解,Python和R都不是特别适合这种工作(至少,我不知道怎么在这两种语言中实现)。那么,处理这种数据的最佳语言或实现方式是什么呢?
6 个回答
3
我发现使用R语言和foreach这个包,真的很简单就能在代码中实现多线程。你可以根据自己的操作系统选择doMC或者doMPI包作为并行处理的后端,如果你用的是类UNIX系统,就用doMC,如果是Windows系统,就用doMPI。这个包的使用说明文档会让你很快上手。这个方法主要适合用来加速for循环,我发现用我电脑上7个核心中的8个,速度通常能提高将近六倍。我不太确定能不能根据第一个进程的结果启动第二个进程,但值得一试。
祝你好运。抱歉我还是个新用户,只能发一个链接,要不然我会把其他相关页面也链接给你。
6
在Python中,可以使用multiprocessing
模块来实现这个功能。这个模块会启动多个进程,而不是线程,这样就可以绕过全局解释器锁(GIL),从而实现真正的并发。
这并不是说Python就是做这件事的“最佳”语言;这个观点是主观的,可以争论。但它确实能够做到这一点。
补充一下:是的,有几种方法可以在进程之间共享数据。管道是最简单的;它们就像文件一样,一个进程可以往里面写数据,另一个进程可以从中读取数据。直接引用文档中的内容:
from multiprocessing import Process, Pipe
def f(conn):
conn.send([42, None, 'hello'])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print parent_conn.recv() # prints "[42, None, 'hello']"
p.join()
例如,你可以让一个进程执行第一步,然后通过管道把结果发送给另一个进程进行第二步。