为什么Python多进程类不更改属性?

2024-10-01 11:37:45 发布

您现在位置:Python中文网/ 问答频道 /正文

#!/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,为什么?你知道吗


Tags: runselfenvfalsetruebininitusr
1条回答
网友
1楼 · 发布于 2024-10-01 11:37:45

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

或者,如果目标是使用线程,而不是进程,那么将导入行更改为from multiprocessing.dummy import Process,这样就得到了由线程而不是进程支持的multiprocessingAPI;线程共享内存空间,因此您将看到预期的结果,尽管在计算量大的线程情况下,由于CPython的GIL,并行性不会给您带来太多好处。你知道吗

相关问题 更多 >