Python 多处理无法从共享集中读取
Python multiprocessing unable to read from shared set
我刚刚开始将 multiprocessing
模块用于从共享 python set()
读取的进程。但是从 p.map
开始,它的行为就好像集合是空的。但是,当我直接声明集合 a = set(["portugal", "india"])
而不通过 init
模块时,一切正常。
这里有什么问题?我的实际处理很复杂。我如何确保代码像使用单处理器一样工作?
from multiprocessing import Pool
class ABC:
a = set()
def __init__(self):
ABC.a.add("portugal")
ABC.a.add("india")
def is_loc(text):
return text in ABC.a
def main():
ABC()
locs = ["portugal", "india", "om", "pitata"]
with Pool(4) as p:
print(p.map(ABC.is_loc, locs)) # [False, False, False, False]
res = list(map(ABC.is_loc, locs))
print(res) # [True, True, False, False]
if __name__ == '__main__':
main()
不知道为什么,但调用它会得到正确的结果
multiprocessing.set_start_method("fork")
我刚刚开始将 multiprocessing
模块用于从共享 python set()
读取的进程。但是从 p.map
开始,它的行为就好像集合是空的。但是,当我直接声明集合 a = set(["portugal", "india"])
而不通过 init
模块时,一切正常。
这里有什么问题?我的实际处理很复杂。我如何确保代码像使用单处理器一样工作?
from multiprocessing import Pool
class ABC:
a = set()
def __init__(self):
ABC.a.add("portugal")
ABC.a.add("india")
def is_loc(text):
return text in ABC.a
def main():
ABC()
locs = ["portugal", "india", "om", "pitata"]
with Pool(4) as p:
print(p.map(ABC.is_loc, locs)) # [False, False, False, False]
res = list(map(ABC.is_loc, locs))
print(res) # [True, True, False, False]
if __name__ == '__main__':
main()
不知道为什么,但调用它会得到正确的结果
multiprocessing.set_start_method("fork")