python:在多个实例上并行调用方法
我试图在多个实例上并行调用同一方法,其中实例引用同一对象 很抱歉让您感到困惑 具体来说,我想将以下for循环更改为并行执行: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 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]