使用锁来确保异步函数只被调用一次
以下是一个示例代码,演示通过使用锁来避免重复调用异步函数的方法:
import asyncio
async def my_async_function(lock):
async with lock:
# 仅当锁可用时才会执行下面的代码
print('my_async_function called')
await asyncio.sleep(1)
print('my_async_function finished')
async def main():
# 创建一个锁对象
lock = asyncio.Lock()
# 同时调用 my_async_function,会发现它只会执行一次
tasks = [my_async_function(lock), my_async_function(lock)]
await asyncio.gather(*tasks)
asyncio.run(main())
在上面的代码中,我们使用了 asyncio.Lock()
来创建一个锁对象,通过 async with lock
来确保在锁被释放之前异步函数只会被调用一次。这种方法可以避免在调用异步函数时产生意外的重复执行。