我之前问了一个相关但非常一般的问题(特别是this response)。
这个问题很具体。这就是我关心的所有代码:
result = {}
for line in open('input.txt'):
key, value = parse(line)
result[key] = value
函数parse
是完全独立的(即,不使用任何共享资源)。
我有Intel i7-920 CPU(4核,8线程;我认为线程更相关,但我不确定)。
我该怎么做才能使我的程序使用这个CPU的所有并行功能?
我假设我可以在8个不同的线程中打开这个文件进行读取,而不会有太大的性能损失,因为磁盘访问时间相对于总时间来说很小。
为什么这是最好的方法。。。
这可以使用Ray来完成,这是一个用于编写并行和分布式Python的库。
要运行下面的代码,首先按如下方式创建
input.txt
。然后,您可以通过将
@ray.remote
decorator添加到parse
函数并并行执行多个副本来并行处理该文件,如下所示注意,最佳的方法取决于运行
parse
函数需要多长时间。如果需要一秒钟(如上所述),那么解析每个Ray任务一行是有意义的。如果需要1毫秒,那么解析每个Ray任务的一堆行(例如100行)可能是有意义的。您的脚本非常简单,因此也可以使用多处理模块,但是只要您想做任何更复杂的事情,或者想利用多台机器而不是一台机器,那么使用Ray就容易多了。
请参阅Ray documentation。
cPython不提供您所寻找的线程模型。使用
multiprocessing
模块和process pool可以得到类似的结果这样的解决方案可能看起来像这样:
相关问题 更多 >
编程相关推荐