python:在多个实例上并行调用方法

python:在多个实例上并行调用方法,python,python-3.x,multiprocessing,Python,Python 3.x,Multiprocessing,我试图在多个实例上并行调用同一方法,其中实例引用同一对象 很抱歉让您感到困惑 具体来说,我想将以下for循环更改为并行执行: for i in range(len(instances)):#instances is a list of instances instances[i].do_some_computation_over_a_dataset() 可能吗 未来读者注意事项: 上面的代码不是在Python中迭代实例集合的方法。这是如何以顺序(即非并行)方式进行迭代: 好的,我们开始吧

我试图在多个实例上并行调用同一方法,其中实例引用同一对象

很抱歉让您感到困惑

具体来说,我想将以下for循环更改为并行执行:

for i in range(len(instances)):#instances is a list of instances
   instances[i].do_some_computation_over_a_dataset()
可能吗

未来读者注意事项:

上面的代码不是在Python中迭代实例集合的方法。这是如何以顺序(即非并行)方式进行迭代:


好的,我们开始吧。首先是代码()

这是一个如何并行调用函数的示例。从[10]中的
:p1.start()
可以看到输出变得混乱,因为当我们运行程序p2时,程序p1并行运行

在Python脚本中运行程序时,您希望确保脚本仅在所有程序都已成功执行时结束。你可以这样做

def multi_process(instance_params, *funcs):
   process = []
   for f in funcs:
       prog = Process(target=f, args=instance_params)
       prog.start()
       process.append(prog)
   for p in process:
       p.join()

multi_process(params, f, f)

Python由于吉尔没有C++或java类多线程支持。虽然如果您的程序执行的I/O操作比CPU密集型任务多,那么您可以使用多线程。对于执行CPU密集型任务,建议使用多处理

在评论中@ytutow询问了员工库和流程之间的区别。发件人:

Pool类可用于管理固定数量的工人 将要完成的工作分解并 在工人之间独立分配

作业的返回值将被收集并作为列表返回

池参数包括进程数和要执行的函数 启动任务进程时运行(每个子进程调用一次)

您可以将池用作:

def your_instance_method(instance):
   instances.do_some_computation_over_a_dataset()

with Pool(3) as p:
    instances = [insatnce_1, instance_2, instance_3]
    print(p.map(your_instance_method, instances))

关于正确的工作线程数,一般建议使用2*cpu\U内核的工作线程数。

此代码似乎显示了
for
循环和
池之间的差异,在不同实例上调用方法:

from multiprocessing import Pool

instances = ['a','ab','abc','abcd']


def calc_stuff(i):
    return len(i)


if __name__ == '__main__':

    print('One at a time')
    for i in instances:
        print(len(i))

    print('Use Pool')
    with Pool(4) as pool:
        print(pool.map(calc_stuff, instances))
注意
if\uuuuuu name\uuuuu=='\uuuuu main':

这将每个过程分开

输出:

One at a time
1
2
3
4
Use Pool
[1, 2, 3, 4]

@quamrana,我想确保所有实例都完成了该方法。是什么让你认为
Pool
没有等待?@quamrana,我不太知道
Pool
,只是猜测一下。这里的第一个代码示例:显然是等待所有进程完成,以便它可以打印所有结果。好的,@quamrana谢谢。这个问题和你的链接问题可能有区别吗?在这里,我们希望在多个实例中调用相同的方法,而在不同的参数中调用相同的方法。谢谢!python中的
multi_process
multi-processing
库有什么区别?多个实例将在某些数据集上运行相同的方法,例如,计算平均值。我相信这是CPU密集型任务。@ytutow这是它的CPU密集型任务。使用
多处理
其Python标准库。我不确定Python中是否有任何mulit_进程模块。它是第三方模块吗?对不起,我不太熟悉
多处理
@y。答案给出了一个如何使用它的示例。阅读我所附的文档以了解更多信息。这回答了你的问题吗?如果是,您可以将其标记为已接受?
from multiprocessing import Pool

instances = ['a','ab','abc','abcd']


def calc_stuff(i):
    return len(i)


if __name__ == '__main__':

    print('One at a time')
    for i in instances:
        print(len(i))

    print('Use Pool')
    with Pool(4) as pool:
        print(pool.map(calc_stuff, instances))
One at a time
1
2
3
4
Use Pool
[1, 2, 3, 4]