On Mon, Dec 22, 2014 at 11:11 PM, Victor Stinner
<[email protected]> wrote:
> Hi,
>
> I updated asyncio doc of the Queue class:
> https://hg.python.org/cpython/rev/ae0b4076b9ad
> https://hg.python.org/cpython/rev/c4643b32cd9a
>
> Maybe it was possible to use get/put as a function, not a coroutine,
> before. And the doc was not updated. Well, now the doc should
> described of Queue behaves. Thanks for the feedback.

No, get/put was coroutines from very beginning. Thanks for doc update,
now it's better.

>
> Victor
>
> 2014-12-18 22:49 GMT+01:00 Paul Sokolovsky <[email protected]>:
>> Hello,
>>
>> On Thu, 18 Dec 2014 22:30:19 +0100
>> Victor Stinner <[email protected]> wrote:
>>
>>> 2014-12-18 19:30 GMT+01:00 Paul Sokolovsky <[email protected]>:
>>> > "Remove and return an item from the queue. If you yield from get(),
>>> > wait until a item is available. If you don't yield from get() (which
>>> > apparently means calling it directly), it won't wait until item is
>>> > available (but do something else, which is underspecified)".
>>>
>>> Queue.get() and Queue.put() are not special. They must be used as any
>>> other coroutine: you must use them with yield-from.
>>
>> Thanks for confirming this.
>>
>>>
>>> Maybe the link on "This method is a coroutine." must explain better
>>> how a coroutine must be used?
>>
>> Well, if that is to be applied, then probably consistently to every
>> function/method which is coroutine. But that may be too verbose, and
>> one might expect that someone using asyncio knows what a coroutine is
>> and how to use it (or will look it up on their own).
>>
>> My specific concern is with the descriptions of get() and post()
>> methods.
>>
>> Specifically, I would propose at
>> https://docs.python.org/3/library/asyncio-sync.html#asyncio.Queue.get
>> to replace
>>
>> "
>> Remove and return an item from the queue.
>>
>> If you yield from get(), wait until a item is available.
>>
>> This method is a coroutine.
>> "
>>
>> with:
>>
>> "
>> Remove and return an item from the queue. If queue does not have any
>> items, wait until an item is available.
>>
>> This method is a coroutine.
>> "
>>
>> Ditto for put().
>>
>>
>> Thanks.
>>
>>>
>>> Example of code:
>>> ---
>>> import asyncio
>>> q = asyncio.Queue()
>>> q.get()
>>> ---
>>>
>>> Output when running the code in debug mode:
>>> ---
>>> $ PYTHONASYNCIODEBUG=1 python3.4 test.py
>>> <CoroWrapper Queue.get() running at
>>> /home/haypo/prog/python/default/Lib/asyncio/queues.py:160, created at
>>> x.py:4> was never yielded from
>>> Coroutine object created at (most recent call last):
>>>   File "tes.py", line 3, in <module>
>>>     q.get()
>>> ---
>>>
>>> You get the same error with a random coroutine:
>>> ---
>>> import asyncio
>>>
>>> @asyncio.coroutine
>>> def transaction():
>>>     yield from asyncio.sleep(1)
>>>     print("transation done")
>>>
>>> transaction()
>>> ---
>>>
>>> Victor
>>
>>
>>
>> --
>> Best regards,
>>  Paul                          mailto:[email protected]



-- 
Thanks,
Andrew Svetlov

Reply via email to