【发布时间】:2021-07-14 15:56:38
【问题描述】:
命名两个列表 A、B
我想从 A 列表中删除 B 列表元素。
不使用多处理的 Python 代码
A = ["leo", "kiki", "eden"]
B = ["eden", "kiki"]
for i in B:
A.remove(i)
我想到的多处理代码如下。
from multiprocessing import Pool
import time
A = ["leo", "kiki", "eden"]
B = ["eden", "kiki"]
def test(i):
global A
A.remove(i)
print("intest : ",A)
if __name__ == '__main__':
global A
pool = Pool(processes=2)
pool.map(test ,B)
pool.close()
pool.join()
print("final : ",A)
输出结果:
intest : ['leo', 'kiki']
intest : ['leo']
final : ['leo', 'kiki', 'eden']
为什么在“intest”中全局变量应用正确。
在“final”中,全局变量更改不适用?
请给我很多帮助。
【问题讨论】:
-
它们是具有独立内存的独立进程;常规变量不会在进程之间神奇地复制。这种魔法只保留给特殊的
multiprocessing类型,例如队列和shared_memory块。 -
考虑到这一点,我们真的需要知道您对
multiprocessing的实际操作。我认为您的问题可能过于简单化了? :) -
@AKX 谢谢你的回复 :) 我会搜索一些 multiprosessing queues 和 shared_memory!!!