Python多处理:将任务异步分配给管理器

问题描述

我需要在不同的进程中保存python对象的实例,调用这些对象的方法并异步收集结果。我的方法是为每个流程和对象创建一个管理器,然后通过管理器调用复制方法

from multiprocessing.managers import SyncManager

class RemoteObject():
    
    def __init__(self):
        
        print('Start expensive init')
        ... # do expensive stuff
        print('End expensive init')

    def expensiveJob(self,*args,**kwargs):
        print('Start expensive job')
        ... # do expensive stuff
        print('End expensive job')

class MyManager(SyncManager): pass

managers = []
instances = []

numInstances = 4

# Create the remote objects
for i in range(numInstances):
    manager = MyManager()
    manager.register('RemoteObject',RemoteObject)
    manager.start()
    managers.append(manager)
    instances.append(manager.RemoteObject())

# do the jobs
myResult = [instance.expensiveJob() for instance in instances]

尽管每个实例现在处于不同的进程中,并且作业在这些不同的进程中执行,但是对象初始化和昂贵的作业都接连发生。也就是说,输出类似于

Start expensive init
End expensive init
Start expensive init
End expensive init
Start expensive init
End expensive init
Start expensive init
End expensive init
Start expensive job
End expensive job
Start expensive job
End expensive job
Start expensive job
End expensive job
Start expensive job
End expensive job

而我希望看到类似的东西

Start expensive init
Start expensive init
Start expensive init
Start expensive init
End expensive init
End expensive init
End expensive init
End expensive init
Start expensive job
Start expensive job
Start expensive job
Start expensive job
End expensive job
End expensive job
End expensive job
End expensive job

我怎么到那里?是否有call_asynchronously方法或我可以使用的类似方法? (我在多处理模块的文档中找不到类似的东西。)

请注意,经典进程池不是此处的选择,因为我需要在多个昂贵作业之间将远程实例保持在内存中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)