Python 如何触发并忘记HTTP请求?
是否可以发出请求而根本不等待响应 对于python,大多数internet搜索结果都是Python 如何触发并忘记HTTP请求?,python,rest,http,Python,Rest,Http,是否可以发出请求而根本不等待响应 对于python,大多数internet搜索结果都是 但是,上述所有解决方案都会产生一个新线程,并在每个线程上等待响应。在任何地方都可以不等待任何回应吗 您可以将线程作为守护进程运行,请参见下面的代码;如果我注释掉该行(t.daemon=True),代码将在退出之前等待线程完成。当daemon设置为true时,它将简单地退出。你可以用下面的例子试试 导入请求 导入线程 导入时间 def get_thread(): g = requests.get(
但是,上述所有解决方案都会产生一个新线程,并在每个线程上等待响应。在任何地方都可以不等待任何回应吗 您可以将线程作为守护进程运行,请参见下面的代码;如果我注释掉该行(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()
如果你像我以前那样关闭连接,你将无法连接
正确的方法
我建议对异步调用使用等待,这样您就可以添加必要的逻辑而不必阻塞
但是,如果您希望获得性能,则需要使用该库的自定义解决方案。也许你也可以在客户端和服务器中考虑非常小的请求/响应、小超时和压缩。有关于为什么/如何工作的链接吗?干杯,明白了。“当程序退出时,守护进程线程将立即关闭”