具有并发功能的python多处理

时间:2018-07-15 18:07:23

标签: python python-multiprocessing

我是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(),因为它们使用彼此的输出。这两种方法都可以工作,但是在这两种方法中使用多处理并没有显着差异。 如果我在这里缺少东西,请告诉我。

1 个答案:

答案 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个进程中的任何一个处理每一行