📅  最后修改于: 2023-12-03 15:37:27.373000             🧑  作者: Mango
在 Python 中等待是一个非常重要的主题,由于 Python 的异步编程特性和多线程并发执行,等待代码段完成才能继续执行的情况必须得到处理。在这篇文章中,我们将讨论在 Python 中等待的几种方法。
time.sleep() 函数是一个非常基础的等待方法,它是通过暂停线程执行来模拟等待操作。在等待的时间内,该线程不会去执行任何其他的指令。下面是一个 time.sleep() 的基本使用样例:
import time
print("Start")
time.sleep(5)
print("End")
输出结果如下:
Start
[等待5秒钟]
End
请注意,在这个例子中,等待时间应该是一个整数,单位是秒。
threading.Event() 是 Python 标准库中一个非常实用的事件处理模块。它允许一个或多个线程等待某些条件的发生,然后一旦满足条件,线程就可以继续执行。它的基础使用方法如下:
import threading
e = threading.Event()
def monitor():
print("Waiting for the signal")
e.wait()
print("Signal arrived")
def trigger():
print("Triggering the event")
e.set()
t1 = threading.Thread(target=monitor)
t2 = threading.Thread(target=trigger)
t1.start()
t2.start()
t1.join()
t2.join()
输出结果如下:
Waiting for the signal
[等待]
Triggering the event
Signal arrived
请注意,e.wait() 是一个阻塞操作,它会一直等待,直到 Event 对象被调用 set() 方法,才会继续执行。
asyncio.sleep() 函数是 Python 3.4 开始引入的异步等待函数。它可以被用来等待其他协程或任务完成的时候,而不是暂停整个线程。下面是一个 asyncio.sleep() 的基本使用样例:
import asyncio
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
print(f"started at {time.strftime('%X')}")
await say_after(1, 'hello')
await say_after(2, 'world')
print(f"finished at {time.strftime('%X')}")
asyncio.run(main())
输出结果如下:
started at 20:47:57
[等待1秒钟]
hello
[等待2秒钟]
world
finished at 20:47:59
在这个例子中,我们使用 asyncio.run 函数来简化代码。可以看到,我们不需要使用 await 在 time.sleep() 完成之前暂停执行整个线程。如果需要等待多个协程任务,并希望它们可以并行地执行,可以使用 asyncio.gather() 函数。
在 Python 中等待可能是一项棘手的任务,但是在应对异步编程、多线程并发等复杂程序中是必不可少的。本文提供了 time.sleep(), threading.Event() 和 asyncio.sleep() 等等不同的方案,帮助程序员更好地应对等待问题。