如何进行Python并行API请求处理?

时间:2016-10-30 13:01:23

标签: python python-asyncio

我在Python(Django)上编写REST服务,这个服务应该通过它的API与另一个REST服务合并。

这里有一些代码和行时间:

connection = statServer("myname", "mypassword")

q1 = connection.getJSONdict("query1") # approximately 15 seconds 
q2 = connection.getJSONdict("query2") # approximately 20 seconds
q3 = connection.getJSONdict("query3") # approximately 15 seconds

# my processing approximately 0.01 of second
# merge q1 + q2 + q3

我很清楚,除了等待I / O之外,每个请求 getJSONdict("查询")实际上什么都不做,所以它不会消耗处理器时间。

请求是顺序的,因此我可以在不同的线程上运行它们。据我所知,Python不提供真正的线程,但在我的情况下,我等待I / O,所以我可以做类似线程的事情。

我认为这通常是Python的用户案例,如果您已经处理过类似这样的任务,请帮助解决我的问题。

我有关于Fork / Join框架的想法,或者更好的是ThreadExecutorPull从我的REST服务中的所有请求中使用我的请求(以及重用线程)。

1 个答案:

答案 0 :(得分:2)

我自己设法做到了。

from multiprocessing.pool import Pool, ThreadPool
# ... others imports

# You can dicede here to use processes or threads,
# if you want threads change Pool() to ThreadPool()
pool = Pool()
connection = statServer("myname", "mypassword")

res = pool.map(connection.getJSONdict, ["query1", "query2", "query3"])
print(res)