我是python的新手,并尝试了许多在python中进行多处理的方法,但没有这些好处: 我的任务是实现3种方法x,y和z。到目前为止,我尝试过的是:
Def foo:
Iterate over the lines in a text file:
Call_method_x()
Result from method x say x1
Call_method_y() #this uses x1
Result from method y say y1
For i in range(4):
Multiprocessing.Process(target=Call_method_z()) #this uses y1
我在method_z上使用了多处理,因为这是最耗费CPU的时间。 我尝试了另一种方式:
def foo:
call method_x()
call method_y()
call method_z()
def main():
import concurrent.futures
with concurrent.futures.ProcessPoolExecutor() as executor:
executor.map(foo())
哪个更合适?我检查了执行时间,但这没什么区别。问题是,应该首先实现method_x(),然后实现method_y(),然后实现method_z(),因为它们使用彼此的输出。这两种方法都可以工作,但是在这两种方法中使用多处理并没有显着差异。 如果我在这里缺少东西,请告诉我。
答案 0 :(得分:0)
您可以使用来自python的multiprocessing.Pool,类似:
from multiprocessing import Pool
with open(<path-to-file>) as f:
data = f.readlines()
def method_x():
# do something
pass
def method_y():
x1 = method_x()
#do something
def method_z():
y1 = method_y()
# do something
def call_home():
p = Pool(6)
p.map(method_z, data)
首先,您读取变量数据中的所有行。然后调用6个进程,并允许6个进程中的任何一个处理每一行