Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请求之间的Django持久API连接_Python_Django_Persistent Connection - Fatal编程技术网

Python 请求之间的Django持久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

所以我有很多内部和外部API,基本上每个请求都会调用它们。这意味着有很多设置到这些API的连接。是否有一种方法可以创建可在请求之间共享的持久连接对象

因此,我想替换:

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
>>>