2017-09-25 26 views
0

複数のソースからJSONを使ってデータを読み取るためにマルチプロセッシングパッケージを使いたいと思っていました。私は無期限にやりたかったのです。無限ループ中のマルチプロセッシング

while True: 
 
\t time_start = datetime.datetime.now() 
 
\t f = open("data_logging_pv.csv", "ab") 
 
\t c = csv.writer(f) 
 
\t if __name__ == '__main__': 
 
\t  p=Pool(6) 
 
\t  output = p.map(getData, [2, 4, 5, 6, 7, 9]) 
 
\t  j = 0 
 
\t  for i in [2, 4, 5, 6, 7, 9]: 
 
\t \t  c.writerow([time_start, i, output[j][0], output[j][1], output[j][2], output[j][3], output[j][4]]) 
 
\t \t  j = j + 1; 
 
\t  print(output) 
 
\t  print("\nTemps d'execution:" +str(datetime.datetime.now()-time_start)) 
 
\t  f.close() 
 
\t  p.terminate()

機能のgetDataは、JSONリクエストです:

は、ここに私のコードテキストです。

実行はp.mapを認識しませんが、プロセスは作成されます。 これをデバッグする方法がわかりません。

私はPythonで少し錆びているし、エンバーでマルチプロセッシングを使用していますが、いくつかの「基本的な」エラーがあるかもしれません。

ありがとう Martin。

+0

私はループが不定ではないことを忘れています、コードは実際には反復回数が増えるにつれて実行時間が長くなっても、動作します。 –

+0

どのpythonバージョンを使用していますか、そして 'getData'が返すJSONの種類はありますか? –

+0

V2.7、そしてあなたが望むものを完全に理解しているかどうかは不明ですが、getDataは5つの値を持つ配列を返します。 –

答えて

0
    それは標準出力へ
  1. プールを書く
  2. リトル最適化されたCSVファイルをスパムの例外を文句を言わないよう
  3. 追加KeyboardInterruptハンドラ、初期化され、一度だけ

わからない、エラーのようなものは、あなたが持っていたが、これスニペットはpython2.7で賢明に動作します:

import csv 
import datetime 
import signal 
from multiprocessing.pool import Pool 


def getData(item): 
    return [item, item + 1, item ** item, item * 2, 0] 


def worker(): 
    signal.signal(signal.SIGINT, signal.SIG_IGN) 


if __name__ == '__main__': 

    time_start = datetime.datetime.now() 
    file = open("data_logging_pv.csv", "ab") 
    c = csv.writer(file) 
    pool = Pool(6, initializer=worker) 

    try: 

     while True: 
      output = pool.map(getData, [2, 4, 5, 6, 7, 9]) 

      for i, res in zip([2, 4, 5, 6, 7, 9], output): 
       c.writerow([str(datetime.datetime.now()), i] + res) 

    except KeyboardInterrupt: 
     exit() 
    finally: 
     pool.terminate() 
     pool.join() 
     print("\nTemps d'execution:" + str(datetime.datetime.now() - time_start)) 
     file.close() 
+0

あなたのアップデートに関する情報を見つける必要があります。 –