1

私は約 140,000 回の API 呼び出しを行う必要があります。問題は、それらすべてに約 15 秒かかることです。これを連続して行うと約 25 日かかりますが、もっと早く完了したいと考えています。

JSON パーサーと解析されたデータを取得する関数を使用して、返されたデータを MySQL データベースにダンプすることを計画しています。Python と PHP に精通しています。

多数の API 呼び出しを同時に実行し、返されたアイテムを DB に解析するための最良の方法 (実装が最も速く、最も簡単な方法) は何ですか?

4

1 に答える 1

1

おそらく、マルチスレッド/マルチプロセッシングを試す必要があります。

これは、API で複数の並列呼び出しが許可されている場合 (および API が実行されているマシンが一度に複数の呼び出しを処理できるほど高速である場合) にのみ役立ちます。

ボトルネックが自分の CPU でない場合は、それ以上の改善はないので、単にthreadingモジュールを使用できます。multiprocessing

未チェックのコードとして、次を試すことができます。

import Queue
import threading

number_of_API_readers = 10

parameters_queue = Queue.Queue()
results_queue = Queue.Queue(100)

for par in list_of_parameters:
    parameters_queue.put(par)

def read_from_queue_and_write_to_db():
    while True:
        try:
            result = results_queue.get(timeout=30)
            #write result to DB
        except Queue.Full:
            break

def query_API_and_write_to_queue():
    while True:
        try:
            par = parameters_queue.get(timeout=5)
            result = SomeAPI.call(par)
            results_queue.put(result)
        except Queue.Empty:
            break

db_writer = threading.Thread(target=read_from_queue_and_write_to_db)
api_readers = [threading.Thread(target=query_API_and_write_to_queue) 
                for i in range(number_of_API_readers)]

db_writer.start()
for ar in api_readers:
    ar.start()

このコードの主なアイデア:

  • データベースに書き込むスレッドが 1 つある
  • API をクエリするスレッドが 10 個など、多数ある
  • (スレッドセーフな) キューを使用してスレッドを同期します。
于 2013-01-31T06:39:27.190 に答える