スレッド環境で実行するのが安全ではないPythonコードの例をいくつですか?例はフレームワーク関連である必要はありません。シンプルなPythonの例と警告が優先されます。ありがとう!スレッドセーフでないPythonコードの例は何ですか?
0
A
答えて
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
SOは特定のプログラミングに関する質問です。スレッドの安全性を表示できる無限のコードがあります。もっと具体的な質問がありますか? –