gpt4 book ai didi

python - 多处理不重新创建对象

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:42 25 4
gpt4 key购买 nike

我创建了一个小代码片段(原始代码要大得多)调用一个创建对象的函数,但在进程池中:

import multiprocessing


class TestClass(object):
pass


def func():
obj = TestClass()
cpname = multiprocessing.current_process().name
print "{0}, Address: {1}".format(cpname, str(obj))


pool = multiprocessing.Pool(2)
results = [pool.apply_async(func) for _ in range(2)]

for res in results:
res.get()

pool.close()
pool.join()

当我运行这段代码时,我得到以下输出:

PoolWorker-1, Address: <__main__.TestClass object at 0x7f05d3fdad50>
PoolWorker-2, Address: <__main__.TestClass object at 0x7f05d3fdad50>
  1. 我不明白的是,为什么对象具有相同的地址,即使它们在不同的进程中?

  2. 如何确保每个进程都创建自己的对象?

非常感谢您的帮助。

最佳答案

当您fork() 进行多重处理时,它会复制您的进程。内存分配器和父进程中的所有地址将被复制到子进程中。因此,下一次分配很可能具有相同的地址。

您可以像这样验证它们实际上是独立的对象:

import time

def func():
obj = TestClass()
obj.name = multiprocessing.current_process().name
print obj.name, str(obj)
time.sleep(1)
print obj.name, str(obj)

关于python - 多处理不重新创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com