现在,我使用Python和R的组合来满足我所有的数据处理需求。但是,我的一些数据集非常大,并且会从多线程处理中受益良多。
例如,如果有两个步骤,每个步骤都必须在一组数百万个数据点上执行,我希望能够在第一步仍在运行时启动第二步,使用已经通过第一步处理的数据部分。
据我所知,Python和R都不是这类工作的理想语言(至少,我不知道如何在这两种语言中实现它)。对于这种类型的数据处理,最好的语言/实现是什么?
发布于 2010-08-18 06:27:36
在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()例如,您可以让一个进程执行第一步,然后通过管道将结果发送到另一个进程以执行第二步。
发布于 2010-08-18 06:40:24
使用R进行多处理非常容易(当然也不会比在Python中更难);请查看multicore包和其他列出的here。
发布于 2010-08-18 08:07:56
我发现在foreach包中使用R确实是在代码中使用多线程的一种简单方法。如果您分别使用类UNIX或windows,则使用doMC或doMPI包作为并行后端。这个小插曲应该会让你走得相当快。这种方法最适合于并行for循环,我发现在我的机器上使用8个内核中的7个,通常可以将速度提高近6倍。我不确定您是否可以根据第一个进程的结果启动第二个进程,但它值得快速查看。
祝好运。抱歉,我是一个新用户,只能发布一个链接,否则我会链接所有其他页面。
https://stackoverflow.com/questions/3507451
复制相似问题