我在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服务中的所有请求中使用我的请求(以及重用线程)。
答案 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)