编码对我来说很新鲜,所以如果我要问的是非常容易或愚蠢,请不要介意我。
我写了一个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 +非常重的对象(事实上,我之所以这样做是因为首先是内存问题)。
有什么建议吗?
干杯。