如何在不等待响应的情况下使用 request.post() 方法

Sum*_*tty 4 api request python-3.x

嗨,我是 Python 开发的新手。

我必须在很短的时间内(最好是秒)进行多次推送。

目前我正在使用请求包的 post 方法将数据发布到 API 中。但是,默认情况下请求方法等待来自 API 的响应。

requests.post(url, json=data, headers=headers)
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以将数据以异步方式发布到 API 中?

谢谢

Ram*_*lat 7

如果您对来自服务器的响应不感兴趣(即发即忘),那么您可以为此使用异步库。但我必须警告你,你不能混合同步和异步代码(实际上你可以但不值得处理)所以你的大部分代码必须改变。

另一种方法是使用线程,它们可以url单独调用等待响应而不会影响其余代码。

这样的事情会有所帮助:

def request_task(url, json, headers):
    requests.post(url, json=data, headers=headers)


def fire_and_forget(url, json, headers):
    threading.Thread(target=request_task, args=(url, json, headers)).start()

...

fire_and_forget(url, json=data, headers=headers)
Run Code Online (Sandbox Code Playgroud)

关于线程的简要信息

线程是独立的执行流程。多个线程并发运行,因此当一个线程启动时,它会与当前执行分开运行。启动一个线程后,您的程序只是继续执行下一条指令,而线程的指令也同时执行。有关更多信息,我推荐realpython 对线程的介绍

  • 非常感谢您不像其他人一样仅仅将 Celery 作为灵丹妙药推荐,并且提供了如此干净简单的示例。这是适合我的用例的完美解决方案。 (3认同)