【问题标题】:async def and coroutines, what's the link异步def和协程,链接是什么
【发布时间】:2016-03-05 00:53:03
【问题描述】:

我正试图围绕 Python3 中出现的新异步功能。

我从 stackoverflow 上找到的一个简单的 worker 示例开始,稍作修改:

import asyncio, random

q = asyncio.Queue()

@asyncio.coroutine
def produce(name):
    while True:
        value = random.random()
        yield from q.put(value)
        print("Produced by {0}".format(name))
        yield from asyncio.sleep(1.0 + random.random())

@asyncio.coroutine
def consume(name):
    while True:
        value = yield from q.get()
        print("Consumed by {0} ({1})".format(name, q.qsize()))
        yield from asyncio.sleep(1.2 + random.random())

loop = asyncio.get_event_loop()
loop.create_task(produce('X'))
loop.create_task(produce('Y'))
loop.create_task(consume('A'))
loop.create_task(consume('B'))
loop.run_forever()

我基本了解它是如何工作的(可能除了yield from asyncio.sleep()...它是委托但阻塞函数的占位符吗?它在哪里产生?)

但是,最重要的是,我怎样才能改变这个例子来使用新的花哨的 async defawait 关键字?又有什么收获呢?

【问题讨论】:

    标签: python-3.x python-asyncio


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      只需替换

      @asyncio.coroutine
      def f(arg)
      

      async def f(arg)
      

      yield from 在您的代码中使用 await

      另请阅读PEP 412 关于async withasync for

      【讨论】:

        猜你喜欢
        • 2020-09-26
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多