私は実際に多くの mysql 操作を含むマルチスレッド プログラムを使用していますが、基本的には、すべてのクエリを機能させるスマートな方法を考え出す必要があるため、非常に苦労しています。これにより、モジュールをスレッドセーフにする方法を考えさせられました。
とにかく、私はこのように質問しようとしています: さまざまなスレッドがたくさんある txt ファイルに常に新しいコンテンツを追加する必要があるとしmain.py
ます。
import threading
lock = threading.RLock()
def AppendStr(the_str):
write_thread = threading.Thread(target = RealAppending, args = (the_str, ))
write_thread.start()
def RealAppending(the_str):
lock.acquire()
the_file = open("test.txt", "a")
the_file.append(the_str)
the_file.close()
lock.release()
def WorkerThread(some_arg):
do stuff
AppendStr("whatever you like")
for counter in range(100):
new_thread = threading.Thread(target = WorkerThread, args = (some_arg, ))
new_thread.start()
さて、問題は、コードをきちんとして維持しやすくしようとしている場合、以下のコードを に入れても機能するかということ write.py
です:
import threading
lock = threading.RLock()
def AppendStr(the_str):
write_thread = threading.Thread(target = RealAppending, args = (the_str, ))
write_thread.start()
def RealAppending(the_str):
lock.acquire()
the_file = open("test.txt", "a")
the_file.append(the_str)
the_file.close()
lock.release()
で次のようにし ます:( Pythonでmain.py
どのように機能するのか本当にわかりません)import
import write
def WorkerThread(some_arg):
do stuff
write.AppendStr("whatever you like")
for counter in range(100):
new_thread = threading.Thread(target = WorkerThread, args = (some_arg, ))
new_thread.start()
またwrite.py
、マルチスレッドの方法で使用している他のモジュールがたくさんある場合、それらのモジュールをインポートして、そこからmain.py
別のモジュールを呼び出しますdef
。すべてが期待どおりに機能しますか? そうでない場合、このように使用できる究極のスレッドセーフなモジュールを設計するにはどうすればよいですか?
write.py
他の多くのモジュールにインポートされている場合、それらはすべて同じものを共有していlock
ますか? そのようなモジュールの変数のスコープは何ですか?