【发布时间】:2016-02-13 05:41:37
【问题描述】:
我尝试在使用多处理模块时在进程中创建新对象。但是,有些事情让我感到困惑。
当我使用多处理模块时,新对象的id是一样的
for i in range(4):
p = multiprocessing.Process(target=worker)
p.start()
def worker():
# stanford named entity tagger
st = StanfordNERTagger(model_path,stanford_ner_path)
print id(st) # all the processes print the same id
但是当我使用线程时,它们是不同的:
for i in range(4):
p = threading.Thread(target=worker)
p.start()
def worker():
# stanford named entity tagger
st = StanfordNERTagger(model_path,stanford_ner_path)
print id(st) # threads print differnt ids
我想知道为什么它们不同。
【问题讨论】:
-
afaik 它是从程序空间开始的偏移量......线程共享程序空间......多处理为每个进程创建新的程序空间
-
这是有道理的。谢谢。