我有以下代码(让我们假设,我无法编辑代码)
class MyRemote(object)
def __init__(self, root_url):
self.root_url = root_url
def save_to_file(self, source_rel_path, target_file_path):
file_contents = cat_remote_file(self.root_url+source_rel_path)
with open(target_file_path, 'w') as f:
f.write(file_contents)
现在,我确实使用:
what_i_want = []
for path in rel_paths:
MyRemote(root_url).save_to_file(path, 'tmp')
ret = UseExternalMethodThatUsesPathInsteadFileObject('tmp')
what_i_want.extend(ret)
remove('tmp')
所以我只是从远程保存文件,做东西,然后删除。不幸的是,len(rel_paths)
~50 000,需要数小时。我无法更改UseExternalMethodThatUsesPathInsteadFileObject
,也没有直接保存方法。我想,我平行地削减了那个时间。我可以保存到例如10个tmp文件,这应该工作。但是,我是多处理的新手,我必须在进程之间共享三个参数,包括类实例。现在我一直没有成功,有人可以帮忙吗?我的代码如下:
def temporary_method(mr, target_file_path):
mr.save_to_file(rel_path, target_file_path)
return UseExternalMethodThatUsesPathInsteadFileObject(target_file_path)
if __name__ == '__main__':
BaseManager.register('MyRemote', MyRemote, exposed=['save_to_file'])
manager = BaseManager()
manager.start()
mr = manager.MyRemote(root_url)
p = Process(target=temporary_method, args=[rel_paths, mr, target_file_path]
???
现在,我被困住了。我不确定我是否传递参数好,如何从进程中返回值(或者我应该将结果附加到进程中的共享列表,可能更好)