所以我有很多基本上每个请求都要调用的内部和外部API。这意味着有很多设置与这些API的连接。有没有办法创建可以在请求之间共享的持久连接对象?
所以我想替换:
def a(request):
c = api.connect()
c.call_function()
使用:
def b(request):
// use existing connection object from earlier request
c.call_function()
有什么想法吗?
我也不确定收益会有多大,但是一旦我有了第一个解决方案,我不介意做一些基准测试。
答案 0 :(得分:3)
非常简单
conn = api.connect() # This line is run only once when the process starts and the module is loaded
def view(request):
conn.call_function() # This line is run every time a request is received
使用相同的工作服务器进程的任何请求都将共享此连接。因此,如果您有三名工作人员为您的应用程序提供服务,您最多只能有三个连
我担心连接可能会开始超时。所以你想要防范这一点。也许通过一个检查连接状态的函数,如果它仍然是好的则返回它,或者如果它已经过期则创建一个新函数。
为什么这个工作可以通过以下示例来说明:
>>> a = 1
>>> def add(b):
... print a + b
...
>>> add(2)
3
请注意,如果不使用全局关键字
,则无法修改连接>>> def change(c):
... a = c
... print a
...
>>> change(4)
4
>>> print a
1
比较
>>> a = 1
>>> def change(d):
... global a
... a = d
... print a
...
>>> change(5)
5
>>> print a
5
>>>
如果你想在不同的工作人员/进程之间共享api连接,那就变得有点棘手了。即不要打扰。
答案 1 :(得分:0)
除了aychedee的回答,我建议你看看django's database persistent connections,这是Django 1.6的新功能。想法:
持久连接避免了在每个请求中重新建立与数据库的连接的开销。
您可以根据自己的需要实施类似的东西。
Django's 1.6 branch中Github上的代码。它足够复杂,但包含连接到期和可用性检查逻辑。