【问题标题】:Reusing connections in Django with Python Requests使用 Python 请求重用 Django 中的连接
【发布时间】:2015-06-10 15:07:44
【问题描述】:

在 Django 中跨多个 HTTP 请求重用 Python Requests 连接的正确方法是什么。这就是我目前正在做的事情:

import requests

def do_request(data):
    return requests.get('http://foo.bar/', data=data, timeout=4)

def my_view1(request)
    req = do_request({x: 1})
    ...

def my_view2(request)
    req = do_request({y: 2})
    ...

所以,我有一个发出请求的函数。这个函数在各种 Django 视图中被调用。用户在单独的 HTTP 请求中调用视图。我的问题是:Python 请求是否自动 reuse the same connections(通过 urllib3 连接池)?

还是我必须先创建一个 Requests 会话对象才能使用?

s = requests.Session()  

def do_request(data):
    return s.get('http://foo.bar/', data=data, auth=('user', 'pass'), timeout=4).text

如果是这样,会话对象是必须在全局范围内创建还是应该在函数内部?

def do_request(data):
    s = requests.Session()  
    return s.get('http://foo.bar/', data=data, auth=('user', 'pass'), timeout=4).text

我可以同时有多个 HTTP 请求,所以解决方案需要线程安全......我是连接池的新手,所以我真的不确定,请求文档在这里不是那么广泛.

【问题讨论】:

    标签: python django python-requests connection-pooling keep-alive


    【解决方案1】:

    创建一个会话,通过函数传递它并返回它来保持会话,或者在全局级别或类级别创建会话对象,以便在引用它时保持最新状态。它会像魅力一样发挥作用。

    【讨论】:

    • 因此,我为每个函数调用创建单个请求。那么,我问题中的第二个代码块实际上是解决方案(s 是在全局范围内定义的)?可以肯定的是......我只是不知道如何调试/跟踪这个。
    猜你喜欢
    • 2021-06-11
    • 2014-09-12
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2011-07-24
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多