FOR doulbeからすべてのスレッド私はシナリオのこの種を持っているが、開始します。PythonはLOOP
すべてwordToScan in wordsList:
10個のスレッドではなく、同時に働いていることを他のwordToScan in wordsList:
ため.readline()
を移動せずにdictionaryFileOpen
を使用する必要があります。また、私はdictionaryFileOpen
をどこに閉じなければならないのか理解できません。ここで
FOR doulbeからすべてのスレッド私はシナリオのこの種を持っているが、開始します。PythonはLOOP
すべてwordToScan in wordsList:
10個のスレッドではなく、同時に働いていることを他のwordToScan in wordsList:
ため.readline()
を移動せずにdictionaryFileOpen
を使用する必要があります。また、私はdictionaryFileOpen
をどこに閉じなければならないのか理解できません。ここで
は、私はそれが行っている方法です。
threads = []
for wordToScan in wordsList:
wordThread = []
dictionaryFileOpen = open(dictionaryFile, "r")
for i in range(10):
wordThread.append(Thread(target=words_Scan_Start, args=(dictionaryFileOpen, wordToScan)))
threads.append(wordThread)
for thread in threads:
for wordThread in thread:
wordThread.start()
for thread in threads:
for wordThread in thread:
wordThread.join()
dictionaryFileOpen.close()
def words_Scan_Start(dictionaryFile, wordToScan):
while True:
sub_word = dictionaryFile.readline()
if not sub_word:
break
#... Here is some actions.
私はそれが正しいでしょうか?
複数のスレッドからファイルを読み取るべきではありません。複数のスレッドからアクセスされている
一般的なアプローチは、あるスレッドからファイルを読み込み、他のスレッドの処理フォークをディスパッチすることです。そして、あなたが1つのスレッドで作業を行うことができれば、はるかに簡単であるので、それを行うだけです。マルチスレッドアプリケーションは、本当に必要なときにのみ作成してください。
はい、私はこれを理解しており、スレッドが「スレッドが安全でない」共有リソースに触れる場所であればLock()を使用しています。しかし、私がファイルを使用しているのは '.readline()'のためだけです。あるスレッドがそれを使用するたびに、次の行にカーソルを置いて行を繰り返す方法がわかりません( '.readline()')。または、すべてのスレッドがリスト内の「次の未使用」アイテムのみを使用するようにする方法。 – passwd
キュー(https://docs.python.org/2/library/queue.html)から行を取り出して処理するワーカースレッドを作成します。次に、行を読み込んでそれをキューにプッシュする1つのリーダースレッドを作成します。 –
Thanx。スレッドは 'wordToScan in wordsList:'を使ってキューを処理しました。しかし、一般的なQueueを使用している分離されたスレッドでは、単語リストの中で 'wordToScan in few words:'を開始しようとしたときには役に立たなかった。あなたが気付いたコードで例を見せてもらえますか? – passwd