在python进程之间使用类实例方法

时间:2018-06-07 14:07:13

标签: python python-3.x multiprocessing

我有以下代码(让我们假设,我无法编辑代码)

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]
???

现在,我被困住了。我不确定我是否传递参数好,如何从进程中返回值(或者我应该将结果附加到进程中的共享列表,可能更好)

0 个答案:

没有答案