python多进程池只使用一个进程
我正在尝试使用多处理来提高迭代速度。我试着像上面说的那样把列表分成几块,但没有改变任何事情 可复制示例:python多进程池只使用一个进程,python,python-3.x,multiprocessing,python-multiprocessing,Python,Python 3.x,Multiprocessing,Python Multiprocessing,我正在尝试使用多处理来提高迭代速度。我试着像上面说的那样把列表分成几块,但没有改变任何事情 可复制示例: from multiprocessing import Pool from os import getpid def iterate(func, iterable): with Pool(2) as pool: pool.map(func, iterable) # print(os.getpid()) # printed out only one
from multiprocessing import Pool
from os import getpid
def iterate(func, iterable):
with Pool(2) as pool:
pool.map(func, iterable)
# print(os.getpid()) # printed out only one id for me
class my_class:
def __init__(self):
self.x = 0
def update(self):
self.x += 1
instances = []
for i in range(200):
instances.append(my_class())
while True:
for i in instances:
iterate(lambda x: x.update(), instances)
print(*list(map(lambda x: x.x, instances)))
func
调用将在单独的进程中进行,而不是iterate
调用——如果将print
放入def update
中,您应该会看到多个pids@AnthonySottile我做到了,打印了很多零。是的,这就是最后的打印:因为突变发生在不同的进程中,所以在父进程中看不到它们afterwards@AnthonySottile那么它是在使用多个进程?然而,我没有看到该计划的任何速度提高。reddit上的一些人建议瓶颈问题,我需要提高程序的速度,但我不确定这是否可行。我能停止瓶颈吗?提速?只有当辅助函数(即lambda表达式)使用相对较少的CPU处理来抵消创建池以及在不同地址空间之间传递参数和返回值时的固有开销时,您才会看到使用多处理的速度降低。