我需要执行大约 140,000 个一次性 API 调用,问题是它们都需要大约 15 秒。这将需要大约 25 天才能连续完成,但是,我想更快地完成它。
我计划使用 JSON 解析器和获取解析数据的函数将返回的数据转储到 MySQL 数据库中。我熟悉 Python 和 PHP。
并发执行多个 API 调用并将返回的项目解析到数据库中的最佳方法是什么(例如,最快和最简单的实现)?
可能您将不得不尝试多线程/多处理。
这只有在 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()
这段代码的主要思想: