2011-07-24 15 views
0

スレッド環境で実行するのが安全ではないPythonコードの例をいくつですか?例はフレームワーク関連である必要はありません。シンプルなPythonの例と警告が優先されます。ありがとう!スレッドセーフでないPythonコードの例は何ですか?

+0

SOは特定のプログラミングに関する質問です。スレッドの安全性を表示できる無限のコードがあります。もっと具体的な質問がありますか? –

答えて

3

次の関数は、ファイルに書き込んだり、予測できない方法でファイルを上書きしたりすることがあります。

import threading 

fp = open('f','w') 

def work1(): 
    for x in range(10000): 
     fp.write('1') 
def work2(): 
    for x in range(10000): 
     fp.write('2') 

t1 = threading.Thread(target = work1) 
t1.daemon = True 
t2 = threading.Thread(target = work2) 
t2.daemon = True 

t1.start() 
t2.start() 
t1.join() 
t2.join() 

一方、ここでのロック機構は、ファイル出力が混ざるのを防止します。

import threading 
lock = threading.Lock() 

fp = open('f','w') 

def work1(): 
    with lock: 
     for x in range(10000): 
      fp.write('1') 
def work2(): 
    with lock: 
     for x in range(10000): 
      fp.write('2') 

t1 = threading.Thread(target = work1) 
t1.daemon = True 
t2 = threading.Thread(target = work2) 
t2.daemon = True 

t1.start() 
t2.start() 
t1.join() 
t2.join() 
+0

GIL – JBernardo

+2

のために各 'fp.write()'が中断されないので、スレッドセーフではありません。このコードがスレッドセーフであるかどうかは実装に依存しますか?その場合、特に良い例です。一つのプラットフォームで開発したり、マルチスレッド関連のバグを取得したり、コードを別のプラットフォームに移動させるとコードがひどく機能する理由を理解できないからです。 – RoundTower

関連する問題