12

WindowsでPython2.7.3を使用する。

numスレッド間で変数を共有して、 num2乗し た後に出力するようにするにはどうすればよいですか?

スレッドがどのように機能するかを理解する必要があることに気づきましたが、ドキュメントには多くがなく、ここにも何も見つかりませんでした。
では、スレッドの機能と2つのスレッド間で変数を共有する方法を誰かが説明できますか?

私のコード(印刷を続けます2

import threading
def func1(num):
    while num < 100000000:
        num =  num**2
def func2(num):
    while num < 100000000:
        print num,
num = 2
thread1 = threading.Thread(target=func1,args=(num,))
thread2 = threading.Thread(target=func2,args=(num,))
print 'setup'
thread1.start()
thread2.start()
4

1 に答える 1

29

この質問に対する一般的な答えはキューです。

import threading, queue

def func1(num, q):
    while num < 100000000:
        num =  num**2
        q.put(num)

def func2(num, q):
    while num < 100000000:
        num = q.get()
        print num,

num = 2
q = queue.Queue()
thread1 = threading.Thread(target=func1,args=(num,q))
thread2 = threading.Thread(target=func2,args=(num,q))
print 'setup'
thread1.start()
thread2.start()

印刷

=== pu@pumbair:~/StackOverflow:507 > ./tst.py
setup
4 16 256 65536 4294967296

この(およびあなたの)コードでは、numはfunc1とfunc2の両方のローカル変数であり、グローバル変数numの初期値を受け取ることを除いて、相互に関係がないことに注意してください。したがって、numはここでは共有されません。むしろ、一方のスレッドはそのnumの値をキューに入れ、もう一方のスレッドはこの値を同じ名前のローカル(したがって異なる)変数にバインドします。しかしもちろん、それはどんな名前でも使うことができます。

于 2013-03-17T13:58:12.550 に答える