Python 请求之间的Django持久API连接
所以我有很多内部和外部API,基本上每个请求都会调用它们。这意味着有很多设置到这些API的连接。是否有一种方法可以创建可在请求之间共享的持久连接对象 因此,我想替换:Python 请求之间的Django持久API连接,python,django,persistent-connection,Python,Django,Persistent Connection,所以我有很多内部和外部API,基本上每个请求都会调用它们。这意味着有很多设置到这些API的连接。是否有一种方法可以创建可在请求之间共享的持久连接对象 因此,我想替换: def a(request): c = api.connect() c.call_function() 与: 有什么想法吗 我也不确定收益会有多大,但一旦我有了第一个解决方案,我不介意做一些基准测试。非常简单 conn = api.connect() # This line is run only once wh
def a(request):
c = api.connect()
c.call_function()
与:
有什么想法吗
我也不确定收益会有多大,但一旦我有了第一个解决方案,我不介意做一些基准测试。非常简单
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
请注意,如果不使用global关键字,则无法修改连接
>>> 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连接,那么就有点麻烦了。i、 别麻烦了。除了aychedee的答案,我建议您看看,这是Django 1.6的新功能。这个想法: 持久连接避免了在每个请求中重新建立到数据库的连接的开销 您可以根据自己的需要实现类似的功能
在Github上的代码。它足够复杂,但包含连接过期和可用性检查逻辑。Ehm。。。事实证明,只要我不尝试设置它,它就可以正常工作。因此,访问conn是可行的,但如果我试图将conn设置得更低(读取后),它会在读取时崩溃。。。我将用示例更新我的问题。你为什么试图分配给conn?我以为整件事都是为了保持联系?如果你想改变全局,你必须使用全局关键字。谢谢,但是这个项目有点太多了。
>>> a = 1
>>> def change(d):
... global a
... a = d
... print a
...
>>> change(5)
5
>>> print a
5
>>>