Python 如何触发并忘记HTTP请求?

Python 如何触发并忘记HTTP请求?,python,rest,http,Python,Rest,Http,是否可以发出请求而根本不等待响应 对于python,大多数internet搜索结果都是 但是,上述所有解决方案都会产生一个新线程,并在每个线程上等待响应。在任何地方都可以不等待任何回应吗 您可以将线程作为守护进程运行,请参见下面的代码;如果我注释掉该行(t.daemon=True),代码将在退出之前等待线程完成。当daemon设置为true时,它将简单地退出。你可以用下面的例子试试 导入请求 导入线程 导入时间 def get_thread(): g = requests.get(

是否可以发出请求而根本不等待响应

对于python,大多数internet搜索结果都是


  • 但是,上述所有解决方案都会产生一个新线程,并在每个线程上等待响应。在任何地方都可以不等待任何回应吗

    您可以将线程作为守护进程运行,请参见下面的代码;如果我注释掉该行(t.daemon=True),代码将在退出之前等待线程完成。当daemon设置为true时,它将简单地退出。你可以用下面的例子试试

    导入请求 导入线程 导入时间

    def get_thread():
        g = requests.get("http://www.google.com")
        time.sleep(2)
        print(g.text[0:100])
    
    
    if __name__ == '__main__':
        t = threading.Thread(target=get_thread)
        t.daemon = True  # Try commenting this out, running it, and see the difference
        t.start()
        print("Done")
    

    我真的不知道您仅仅通过触发http请求来实现什么。所以我将列出一些我能想到的用例

    忽略结果

    如果你唯一想要的是你的程序感觉它从来不会停止发出请求。您可以使用像make这样的库,而无需实际调用
    wait
    获取响应

    import aiohttp
    import asyncio
    
    async def main():
        async with aiohttp.ClientSession() as session:
            session.get('http://python.org') 
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    
    但是如果你不检查任何东西,你怎么知道请求成功了呢

    忽略主体

    也许你想表现得很好,你担心失去阅读身体的时间。在这种情况下,您可以启动请求,检查状态代码,然后关闭连接

    def make_request(url = "yahoo.com", timeout= 50):
        conn = http.client.HTTPConnection(url, timeout=timeout)
        conn.request("GET", "/")
        res = conn.getresponse()
        print(res.status)
        conn.close()
    
    如果你像我以前那样关闭连接,你将无法连接

    正确的方法

    我建议对异步调用使用
    等待
    ,这样您就可以添加必要的逻辑而不必阻塞


    但是,如果您希望获得性能,则需要使用该库的自定义解决方案。也许你也可以在客户端和服务器中考虑非常小的请求/响应、小超时和压缩。有关于为什么/如何工作的链接吗?干杯,明白了。“当程序退出时,守护进程线程将立即关闭”