2016-10-04 3 views
0

私は約4つの入力テキストファイルを読み込み、すべてを1つの別々のファイルに書きたいと思っています。 私は2つのスレッドを使用するので、より速く実行されます!
私の質問とPythonのコードです:

1 - 各スレッドは "writeInFile"関数内に "lines"などの独自のバージョンの変数を持っていますか?

2 - Tutorialspointのコードの一部をコピーしたので、最後の行で "while 1:pass"が何か分かりません。説明できますか? http://www.tutorialspoint.com/python/python_multithreading.htm

3 - 私はスレッドにどのような遅延を置くかは重要ですか?

4 - 私が約400の入力テキストファイルを持っていて、それらのすべてを別々のファイルに書き込む前にいくつかの操作をしたい場合、使用できるスレッドの数はいくつですか?

5つのスレッドを使用すると仮定すると、入力が異なるフォルダ(それぞれ40個の入力テキストファイルがある10個のフォルダ)にあり、スレッドごとに1つのフォルダが呼び出されるか、既に以下のコードそれ以前に他のスレッドで読み込まれていない場合は、各スレッドに400個の入力テキストファイルの1つを読み込ませるように頼んでいますか?

Pythonでいくつかのスレッドを使って1つのメソッドを呼び出す

processedFiles=[] # this list to check which file in the folder has already been read by one thread so the other thread don't read it 
 

 
#Function run by the threads 
 
def writeInFile(threadName, delay): 
 
    for file in glob.glob("*.txt"): 
 

 
     if file not in processedFiles: 
 
     processedFiles.append(file) 
 
     f = open(file,"r") 
 
     lines = f.readlines() 
 
     f.close() 
 

 
     time.sleep(delay) 
 
     #open the file to write in 
 
     f = open('myfile','a') 
 
     f.write("%s \n" %lines) 
 
     f.close() 
 
     print "%s: %s" % (threadName, time.ctime(time.time())) 
 

 

 

 
# Create two threads as follows 
 
try: 
 
    f = open('myfile', 'r+') 
 
    f.truncate() 
 

 
    start = timeit.default_timer() 
 

 
    thread.start_new_thread(writeInFile, ("Thread-1", 0,)) 
 
    thread.start_new_thread(writeInFile, ("Thread-2", 0,)) 
 
    stop = timeit.default_timer() 
 

 
    print stop - start 
 

 
except: 
 
    print "Error: unable to start thread" 
 

 

 
while 1: 
 
    pass

答えて

0
  1. はい。各ローカル変数はスレッドのスタック上にあり、スレッド間で共有されません。
  2. このループにより、親スレッドは、プログラムの終了前に各子スレッドが終了して終了するのを待つことができます。これを処理するために使用する実際の構文は、whileループではなくjoinです。 what is the use of join() in python threadingを参照してください。
  3. 実際には、特にスレッドが共通のファイルセットに書き込みを行っている場合(スレッド1とスレッド2の両方が同じファイルを読み書きする場合など)ハードウェア、ファイルのサイズ、書き込もうとするデータの量によっては、遅延が異なると、プログラムがユーザーに反応しないように感じる場合があります。最高の賭けは、簡単な値から始めて、実際の設定でプログラムが動作するのを見て調整することです。
  4. 技術的には、必要な数のスレッドを使用できますが、通常、CPUごとにコアあたり1スレッド以上のパフォーマンス上の利点はありません。
  5. 異なるフォルダは、わずか400ファイルで重要ではありません。あなたが4,000,000のファイルについて話しているのであれば、それらのディレクトリにlsを実行したいときには、インスタンスにとって重要かもしれません。パフォーマンスに関して重要なことは、各スレッドがそれ自身のファイル上で動作しているかどうか、または2つ以上のスレッドが同じファイル上で動作しているかどうかということです。

一般的な思考:それは、より高度なアーキテクチャがある一方で、本番環境http://www.celeryproject.org/に/タスクのこれらのタイプのために使用セロリを学ぶために試してみたいことがあります。

+0

返信ありがとうございます –

関連する問題