繁体   English   中英

为什么Python Multiprocess类不更改属性?

[英]Why Python Multiprocess class doesn't change the attribute?

#!/usr/bin/env python
from multiprocessing import Process

class Signprocess(Process):
  """docstring for SignThread"""
  def __init__(self):
    super(SignThread, self).__init__()
    self.result = False


  def run(self):
    self.result = True
    print 123

process= Signprocess()
print process.result
process.start()
print process.result
process.join()
print process.result

这是输出

False
False
123
False

真的很奇怪,输出123指示run()方法实际上已执行,但是result属性从未设置为True ,为什么?

Process代表一个分叉的进程,而不是线程。 发生fork之后(在执行self.result = True之前),内存空间将变为未链接; 一个进程中的更改不会影响另一进程,除非在共享内存上显式执行或通过其他形式的IPC传达结果。 阅读更多的multiprocessing文档; 它提供了多种来回通信数据的方式,但是普通的Python对象状态不是这些方式之一。

或者,如果目标是使用线程而不是进程,则将导入行from multiprocessing.dummy import Process更改为,它使您获得由线程而不是进程支持的multiprocessing API。 线程共享内存空间,因此您会看到预期的结果,尽管在计算量很大的线程情况下,由于CPython的GIL,并行性并不会带来太大收益。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM