在Python中,asyncio.gather()正常情况下不会使函数运行两次。它将在并发执行传递的协程之后返回结果,而asyncio.create_task()可以异步地启动协程。因此,不需要在asyncio.gather()中使用asyncio.create_task()。
以下是一个示例代码,说明如何使用asyncio.gather()来避免函数运行两次的问题:
import asyncio
async def sample_coroutine():
print("Coroutine execution started.")
await asyncio.sleep(2)
print("Coroutine execution finished.")
async def main():
await asyncio.gather(sample_coroutine())
asyncio.run(main())
在上面的示例中,我们使用asyncio.gather()来封装了sample_coroutine()协程,使其并发执行。在main()函数中运行asyncio.run()方法可以运行两个协程,但是sample_coroutine()协程不会运行两次。