我试图搞清楚多进程,我遇到了一些我完全不理解的东西。
我用pathos.multiprocessing来做更好的腌制。下面的代码创建了要迭代的对象列表。但是,当我运行它时,它会打印几个不同的列表,尽管引用了相同的变量?
import os
from pathos.multiprocessing import ProcessPool as Pool
class AnyClass:
def __init__(self):
pass
def any_function():
any_list = []
for i in range(0, 3):
any_object = AnyClass()
any_list.append(any_object)
def particular_function(_argument):
print(any_list)
with Pool(os.cpu_count()-1) as pool:
pool.map(particular_function, any_list)
print(any_list)
if __name__ == '__main__':
any_function()输出如下所示,每次都有不同的列表。
[<__main__.AnyClass object at 0x7ff03da8ffd0>, <__main__.AnyClass object at 0x7ff03da9c040>, <__main__.AnyClass object at 0x7ff03da9c070>]
[<__main__.AnyClass object at 0x7ff03da9c100>, <__main__.AnyClass object at 0x7ff03da9c130>, <__main__.AnyClass object at 0x7ff03da9c160>]
[<__main__.AnyClass object at 0x7ff03da9c1f0>, <__main__.AnyClass object at 0x7ff03da9c220>, <__main__.AnyClass object at 0x7ff03da9c250>]
[<__main__.AnyClass object at 0x7ff03ac6a4f0>, <__main__.AnyClass object at 0x7ff03ac9ad60>, <__main__.AnyClass object at 0x7ff03da57af0>]如果这是一个糟糕的解释或糟糕的问题,我很抱歉,因为我对python非常陌生,但是有没有办法解决这个问题?(每次都有相同的列表?)
发布于 2021-05-23 18:42:37
使用多处理时,库会产生多个不同的进程。每个进程都有自己的地址空间。这意味着每个过程都有自己的变量副本,而一个进程中的任何更改都不会反映在其他流程中。
为了使用共享内存,需要特殊的构造来定义全局变量。对于pathos.multiprocessing,从这注释中,似乎可以通过导入以下内容来声明多处理类型的共享变量:
from pathos.helpers import mp as multiprocess
a = multiprocess.Array('i', 2) # Declares an integer array of size 2https://stackoverflow.com/questions/67663109
复制相似问题