2017-10-28 9 views
-2

私は30-40のAPIコールを設定する必要があるアプリケーションを持っています。それぞれのAPIコールは、ステータスをポーリングしてAPIから取得する必要があるクエリ「ジョブ」を開始します。各ジョブは、即時から3〜4分の間で、未知の時間がかかります。"jobs"のPythonic Multithreading

これは、これらのジョブを「ディスパッチ」して結果を処理する前にすべてのジョブが完了するのを待つマルチスレッドモデルを適用するのに適しているようです。私はPythonで利用できるすべてのオプションについて混乱しています。concurrent.futuresまたはasyncioまたはgreenletsのどちらを使うべきかは私には不明です。

どのようにオプションを評価し、読み込み可能なPythonコードで結果を出すかを選択しますか?どれが最も普及し再利用可能なライブラリですか(言い換えれば、どちらが私の時間にとって良い投資ですか)? 私の仕事には最適なものはどれですか?

私の問題をPython 3.6以降に翻訳する方法についてのアドバイスやご指摘をいただければ幸いです。

答えて

2

私は本当にあなたが何を求めているのか分かりません。しかし、マルチプロセッシングは、Pythonには本当に簡単ですし、あなたは、単に仕事をトリガーする必要がある場合、次は役立つかもしれない:

import multiprocessing as mp 

def print_index(x): 
    print(x) 

jobs = [] 
for i in range(3): 
    p = mp.Process(target=print_index, args=(i,)) 
    jobs.append(p) 
    p.start() 

for job in jobs: #wait for the 3 jobs to finish... 
    job.join() 

あなたはドキュメント経由でマルチプロセッシングについての詳細を調べることができます:https://docs.python.org/3/library/multiprocessing.html

+0

感謝を!私は、ほとんどの場合、マルチスレッドやマルチプロセッシングを達成するための「最良の」または最も一般的な方法を理解するのに役立っています。これには幅広いツールが用意されています.3.5周りの標準ライブラリにasyncioを追加して以来、どれがまだ関連しているのかは不明です! – esoterydactyl

+0

asyncioは使用しないでください。それを理解する余裕があるわけではありません。また、私はあなたがCPUに束縛されていないので、ここでスレッドをお勧めします。 – xaav

+0

はい、マルチスレッド化が適しています。なぜ私はMPを心に持っていたのか分かりません。 – pookie