是否有可能触发请求而根本不等待响应?
对于python,大多数Internet搜索结果都在
但是,以上所有解决方案都产生一个新线程,并等待每个相应线程的响应。是否有可能根本不在任何地方等待任何响应?
答案 0 :(得分:1)
您可以将线程作为守护程序运行,请参见下面的代码;如果我注释掉该行(t.daemon = True),则代码将在退出之前等待线程完成。将守护程序设置为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")
答案 1 :(得分:0)
我真的不知道您只是通过发出http请求来达到什么目的。因此,我将列出一些我能想到的用例。
忽略结果
如果您唯一想要的是您的程序感觉像它一样永不停歇地发出请求。您可以使用aiohttp之类的库来制作concurrent request,而无需实际调用await
进行响应。
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()
如果您像以前一样关闭连接,将无法reuse the connections。
正确的方法
我建议使用aiohttp进行await
异步调用,以便您可以添加必要的逻辑而不必阻塞。
但是,如果您要寻找性能,则需要使用http库的自定义解决方案。也许您还可以考虑在客户端和服务器中进行很小的请求/响应,小的超时和压缩。