2017-09-05 7 views
0

私はスレッドしたコードを書いています。いろいろな関数を同時に使っています。スレッドごとに異なるrefという変数があります。関数間のPython共有変数ですが、スレッドではありません

refはスレッド関数内の関数内で定義されているため、グローバルrefを使用すると、すべてのスレッドは同じ値(ref)を使用します。しかし、グローバルrefを使用しない場合、他の関数は定義されていないのでrefを使用することはできません。

例えば:

def threadedfunction(): 
    def getref(): 
     ref = [get some value of ref] 
    getref() 
    def useref(): 
     print(ref) 
    useref() 
threadedfunction() 
+0

引数と戻り値について聞いたことがありますか?あなたは、データを関数間でやりとりするためにそれらを使用する必要があります。 – user2357112

+1

これはマルチスレッド化することを検討する前に100%快適にする必要があるものです。 – user2357112

+0

スレッド間で書いているのであれば、スレッドセーフなタイプも使用する必要があります。 Pythonの組み込み型は安全であるとは保証されません。 –

答えて

0

、あなたは他の多くのオプションを持っていないユーザーのニーズに合わないglobalとしてrefを定義する場合は...

編集して、関数のパラメータと戻ります。考えられる解決策:

def threadedfunction(): 

    def getref(): 
     ref = "Hello, World!" 
     return ref # Return the value of ref, so the rest of the world can know it 

    def useref(ref): 
     print(ref) # Print the parameter ref, whatever it is. 

    ref = getref() # Put in variable ref whatever function getref() returns 
    useref(ref) # Call function useref() with ref's value as parameter 

threadedfunction() 
+0

ありがとうたくさんの男 –

関連する問題