1

我需要执行大约 140,000 个一次性 API 调用,问题是它们都需要大约 15 秒。这将需要大约 25 天才能连续完成,但是,我想更快地完成它。

我计划使用 JSON 解析器和获取解析数据的函数将返回的数据转储到 MySQL 数据库中。我熟悉 Python 和 PHP。

并发执行多个 API 调用并将返回的项目解析到数据库中的最佳方法是什么(例如,最快和最简单的实现)?

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()

这段代码的主要思想:

  • 有一个线程写入数据库
  • 有很多,例如 10 个线程查询 API
  • 使用(线程安全)队列来同步线程。
于 2013-01-31T06:39:27.190 回答