gpt4 book ai didi

执行 HTTP 调用时打印一个点到控制台的 Python 函数

转载 作者:行者123 更新时间:2023-12-05 01:54:54 24 4
gpt4 key购买 nike

我对 Python 有点陌生。我环顾四周,但找不到完全符合我正在寻找的答案。

我有一个使用请求包进行 HTTP 调用的函数。我想打印一个“。”在 HTTP 请求执行时每 10 秒对屏幕(或任何字符)说一次,并在完成时停止打印。所以像这样:

def make_call:  
rsp = requests.Post(url, data=file)
while requests.Post is executing print('.')

当然上面的代码只是伪代码,但希望能说明我希望完成的事情。

最佳答案

requests 模块的每个函数调用都是阻塞的,因此您的程序会一直等待,直到函数返回一个值。最简单的解决方案是使用已经建议的内置 threading 库。使用此模块允许您使用代码“parallelism”*。在您的示例中,您需要一个线程来处理请求,该线程将被阻塞直到请求完成,另一个线程用于打印。

如果您想了解有关更高级解决方案的更多信息,请参阅此答案 https://stackoverflow.com/a/14246030/17726897

以下是使用threading 模块实现所需功能的方法

def print_function(stop_event):
while not stop_event.is_set():
print(".")
sleep(10)


should_stop = threading.Event()
thread = threading.Thread(target=print_function, args=[should_stop])
thread.start() # start the printing before the request
rsp = requests.Post(url, data=file) # start the requests which blocks the main thread but not the printing thread
should_stop.set() # request finished, signal the printing thread to stop
thread.join() # wait for the thread to stop

# handle response

* 由于全局解释器锁 (GIL) 之类的原因,并行性在引号中。来自不同线程的代码语句不会同时执行。

关于执行 HTTP 调用时打印一个点到控制台的 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70455932/

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