使用python多处理(池)处理多个链式函数

时间:2017-06-19 04:47:54

标签: python string multithreading multiprocessing python-multiprocessing

编码对我来说很新鲜,所以如果我要问的是非常容易或愚蠢,请不要介意我。

我写了一个python脚本来做一些模糊的东西,长话短说,我试图比较来自4个不同文件的类似对象的一些字符串。

首先我需要获取每个文件中的对象,然后以我可以比较它们的格式转换我感兴趣的对象部分,然后进行比较,最后将结果写入文件中。

不幸的是,它超级慢。我知道我的瓶颈步骤在哪里(对象转换部分,function2()),我想通过一些多处理来提高程序的速度。

我尝试了几件事,我唯一能成功的就是游泳池功能。

所以我做了一个很大的功能,总结了我的所有步骤,并尝试让它与池工作者一起工作。

import multiprocessing as mp


def function1(name_object,input):

    fetch the objects in input
    return objects

def function2(objects) :

    transforming the objects into strings
    return strings

def function3(strings,output) :

    compare each position of the strings
    outptut.write(results)

def function_finale(name_object,input,output) :
    objects = function1(name_object,input)
    strings = function2(objects)
    results = function3(strings,output)

if __name__ == '__main__':

    pool = mp.Pool(processes=4)

    [pool.apply_async(combine, args=(object,file)) for object in file]

(Un)令人惊讶的是,池工人在第一个子功能之后终止了该功能。我想我可以做并行编程,因为我的对象可以按任何顺序异步处理,但是一旦获取了一个对象,就必须遵循我的函数的顺序。

基本上,我想在我的循环中同时处理多个对象,并且有几个进程!它应该是可能的,对吧?

我有一些约束,例如,我无法存储字典中的所有内容,因为我有300k +非常重的对象(事实上,我之所以这样做是因为首先是内存问题)。

有什么建议吗?

干杯。

0 个答案:

没有答案