2

私はスレッドをいじっています。誰かがここで何が起こっているのかについていくつかの光を当てることができますか?

from multiprocessing import Process
from time import sleep

class Thing(object):
    def __init__(self):
        print "__init__:", id(self)
        self.a = 100
        self.b = 200

  def run(self):
      while True:
          sleep(5)
          print id(self.a), self.a, '*', id(self.b), self.b

次に、次の方法でこのスクリプトを開きpython -iます。

t = Thing()
p = Process(target=t.run)
p.start()
# Thread starts running and reporting IDs every 5 seconds

# if I do..
t.a = 500

# The address of `t.a` changes (using `id()`) and the thread still reports 100.

機能することを期待することは、非常に大雑把なスレッド通信を意味することを理解していますが、ある時点で、私が利用できるものと Process() 内にあるものの 2 つの Thing() オブジェクトがあるように見えます。いつコピーされますか?

そして最も重要なこと:

self.aINSIDE theの値を変更するにはどうすればよいProcess()ですか?

4

1 に答える 1

1

この状況では、スレッドではなくプロセスを使用しているため、プロセス間通信が必要です。キューでそれを実現できます。http://docs.python.org/dev/library/multiprocessing.htmlを参照して、17.2.1.3 を探してください。プロセス間でのオブジェクトの交換。

于 2013-08-16T11:41:30.903 に答える