Python 从django对外部API进行并行并发调用

Python 从django对外部API进行并行并发调用,python,django,apache,mod-wsgi,Python,Django,Apache,Mod Wsgi,我有一个django应用程序(django+python+apachemod_wsgi),它作为两个系统之间的中间件,从一个系统获取请求,并向其他api发出多个请求以获取和准备所需的响应,然后将响应传递给请求系统 所以它基本上是一个一对多的中间件,问题是按顺序调用占用了太多的时间,我尝试使用线程来实现IO并发。然而,这不起作用(我读过django在单线程上工作;如果我错了,请纠正我),我没有在Web服务器上并行发出请求,也不知道如何做 以下是目前的执行情况: with futures.Th

我有一个django应用程序(
django+python+apachemod_wsgi
),它作为两个系统之间的中间件,从一个系统获取请求,并向其他api发出多个请求以获取和准备所需的响应,然后将响应传递给请求系统

所以它基本上是一个一对多的中间件,问题是按顺序调用占用了太多的时间,我尝试使用线程来实现IO并发。然而,这不起作用(我读过django在单线程上工作;如果我错了,请纠正我),我没有在Web服务器上并行发出请求,也不知道如何做

以下是目前的执行情况:

   with futures.ThreadPoolExecutor(max_workers=MAX_BATCH_SIZE) as executor:
        future_to_url = {}
        for pnode in plist_node:
            config = {'url':rurl}
            futur = executor.submit(self.get_result_from_url, config)

有人能建议一下正确的方法吗?

我认为这是正确的方法。这是Python对这个主题的一个很好的介绍。@Borut asyncio在这方面有什么帮助?你能解释一下吗?我必须打X个电话->等待结果->加入结果->回复。它会有帮助吗?它会异步运行调用。它将在前一次通话结束之前继续下一次通话,而不是等待每次通话结束。一旦它们全部完成,您就加入结果并做出响应。使用asyncio通常意味着您需要从头开始运行使用asyncio的web应用程序。在线程化WSGI应用程序的上下文中使用asyncio并不是那么简单。OP应该解释“这不起作用”。如果没有细节,就无法说出代码的错误,或者发生了什么,发生了什么错误等等@GrahamDumpleton,你是对的。如果没有像芹菜这样的东西,它在Django的环境中是不起作用的。但是,由于关键是使API调用更快,您可能可以通过在同步函数中运行异步函数来加快此过程,或者不运行异步函数?我这样做了一两次,芹菜似乎是一种过度的杀伤力。这似乎有助于缩短执行时间,或者这只是我的想象?