代码之家  ›  专栏  ›  技术社区  ›  CodeMonkey

Python在run_until_complete和sure_future之间的关系

  •  0
  • CodeMonkey  · 技术社区  · 6 年前

    Why do most asyncio examples use loop.run_until_complete()?

    我正试图弄清楚异步编程在python中是如何工作的。有些很基本的东西我还是不确定。。

    当有此行代码时: asyncio.ensure_future(someTask) Future 在默认事件循环中返回并启动任务?或者我也需要打电话 loop.run_until_complete(someTask)

    2 回复  |  直到 6 年前
        1
  •  1
  •   dirn    6 年前

    asyncio.ensure_future(someTask) 这一行是否真的将默认事件循环中返回的Future排队并启动任务?

    loop.run_forever()
    

    如果你想循环运行到 someTask

    future = asyncio.ensure_future(someTask)
    loop.run_until_complete(future)
    

    不要两个都打 异步。确保未来(someTask) loop.run_until_complete(someTask) 否则你会得到一个 RuntimeError 自从 已经安排好了。

        2
  •  0
  •   user4815162342    6 年前

    当有此行代码时: asyncio.ensure_future(someTask) ,这一行是否实际将默认事件循环中返回的Future排队并启动任务?

    不要 需要做任何其他事情-任务将出现神奇运行“在后台”。

    任何 要运行的任务,而不仅仅是刚添加的任务。 loop.run_until_complete(some_specific_task) loop.run_forever() ,意思是“运行事件循环直到有人调用 loop.stop() ".

    ensure_future(task) 是因为如果你已经有了 Task ,它将原封不动地返回。 ensure_future(some_coroutine()) 会把联程变成一个 ,在事件循环中调度它,并返回它,有效地调用 loop.create_task() 为你。当这场争论被认为是一场合作时 recommended create_task 直接的。