gpt4 book ai didi

python - 异步 Python - 触发并忘记 HTTP 请求

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:57 28 4
gpt4 key购买 nike

不确定这是否可以实现。我想从脚本触发 HTTP POST 请求,但不等待响应。相反,我想立即返回。

我尝试了一些类似的方法:

#!/usr/bin/env python3

import asyncio
import aiohttp

async def fire():
await client.post('http://httpresponder.com/xyz')

async def main():
asyncio.ensure_future(fire())

if __name__ == '__main__':
loop = asyncio.get_event_loop()
client = aiohttp.ClientSession(loop=loop)
loop.run_until_complete(main())

脚本立即无误返回,但 HTTP 请求永远不会到达目的地。我可以触发 POST 请求,但不等待服务器响应,而是在发送请求时立即终止吗?

最佳答案

使用asyncio,你可以编写一个简单的装饰器作为@background。现在您可以在 foo() 中编写任何内容,并且控制流不会等待其完成。

import asyncio
import time


def background(f):
from functools import wraps
@wraps(f)
def wrapped(*args, **kwargs):
loop = asyncio.get_event_loop()
if callable(f):
return loop.run_in_executor(None, f, *args, **kwargs)
else:
raise TypeError('Task must be a callable')
return wrapped


@background
def foo():
time.sleep(1)
print("foo() completed")


print("Hello")
foo()
print("I didn't wait for foo()")

产生:

Hello
I didn't wait for foo()
foo() completed

关于python - 异步 Python - 触发并忘记 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52526353/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com