This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2014年07月31日 02:40 by pydanny, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| Screen Shot 2014年07月30日 at 8.13.12 PM.png | pydanny, 2014年07月31日 03:10 | |||
| doc_create_task.patch | vstinner, 2014年08月02日 11:19 | review | ||
| Messages (10) | |||
|---|---|---|---|
| msg224374 - (view) | Author: Daniel Greenfeld (pydanny) | Date: 2014年07月31日 02:40 | |
Problem ======== The documentation on asyncio provides an example of a parallel execution of tasks. The code is at: https://docs.python.org/3/library/asyncio-task.html#example-parallel-execution-of-tasks ``` python import asyncio @asyncio.coroutine def factorial(name, number): f = 1 for i in range(2, number+1): print("Task %s: Compute factorial(%s)..." % (name, i)) yield from asyncio.sleep(1) f *= i print("Task %s: factorial(%s) = %s" % (name, number, f)) loop = asyncio.get_event_loop() tasks = [ loop.create_task(factorial("A", 2)), loop.create_task(factorial("B", 3)), loop.create_task(factorial("C", 4))] loop.run_until_complete(asyncio.wait(tasks)) loop.close() ``` Unfortunately, when I try to run this sample code on Python 3.4.1, I run into an error. Specifically, the `loop.create_task()` method does not exist: ``` python Traceback (most recent call last): File "what_me_asynicio.py", line 14, in <module> loop.create_task(factorial("A", 2)), AttributeError: '_UnixSelectorEventLoop' object has no attribute 'create_task' ``` When I perform a dir() on the `loop` object, no `create_task` item is in the result. System Information ==================== Python Version: 3.4.1 Operating System: OSX 10.9.3 (Also confirmed on Python 3.4.0 in Ubuntu 14.04) |
|||
| msg224376 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2014年07月31日 02:47 | |
Thanks for reporting a doc bug! The code should use asyncio.async() instead of loop.create_task(). |
|||
| msg224377 - (view) | Author: Daniel Greenfeld (pydanny) | Date: 2014年07月31日 03:10 | |
This has been fixed in 3.4.2, but shows up in the 3.4.1 documentation. How do I fix the 3.4.1 documentation so this doesn't show up? |
|||
| msg224378 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2014年07月31日 03:48 | |
I honestly don't know; ask Benjamin. :-) Personally, I'd say that ship has sailed. |
|||
| msg224388 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2014年07月31日 09:04 | |
> This has been fixed in 3.4.2, but shows up in the 3.4.1 documentation. Well, I didn't want to change Python 3.4.1 documentation, but it looks like https://docs.python.org/3.4/ is updated after each commit into the 3.4 branch. For example, new asyncio functions added in 3.4.2 are already documented: https://docs.python.org/3.4/library/asyncio-eventloop.html#asyncio.BaseEventLoop.create_task I changeed all examples to use create_task() instaed of async() or the Task contructor: changeset: 91609:66f06fbf8a2f branch: 3.4 user: Victor Stinner <victor.stinner@gmail.com> date: Tue Jul 08 12:39:10 2014 +0200 files: Doc/library/asyncio-dev.rst Doc/library/asyncio-eventloop.rst Doc/library/asyncio-stream.r description: Update asyncio documentation - Document the new create_task() method - "Hide" the Task class: point to the create_task() method for interoperability - Rewrite the documentation of the Task class - Document the "Pending task destroyed" - Update output in debug mode of examples in the dev section - Replace Task() with create_task() in examples Maybe I should revert this change in the 3.4 branch, but mention that Python 3.4.2 and 3.5 have a new create_task() which is now the recommanded way to schedule a coroutine (to create a task object). |
|||
| msg224427 - (view) | Author: Daniel Greenfeld (pydanny) | Date: 2014年07月31日 16:51 | |
First, if there is documentation that says, "3.4.1", doesn't it make sense that the documentation should only be for 3.4.1? Which means that this create_task documentation should be reverted in the 3.4.1 documentation to match the 3.4.1 specification. Second and most respectfully, why is a feature being added in 3.4.2? I thought this kind of release (3.4.1 to 3.4.2) was for bug fixes and security issues, not new features. Unless create_task was in the original 3.4 specification, I argue that create_task belongs in 3.5. In it's place, a recipe of running tasks in parallel fashion per gvanrossum's suggestion of asyncio.async() could be added. |
|||
| msg224429 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2014年07月31日 17:11 | |
asyncio has an explicit exemption from the general rule that bugfixes should not add new features. This is because of the "provisional" status of the PEP. We'll stop doing this once 3.5 is out. I don't know what's up with the online docs. On Thu, Jul 31, 2014 at 9:51 AM, Daniel Greenfeld <report@bugs.python.org> wrote: > > Daniel Greenfeld added the comment: > > First, if there is documentation that says, "3.4.1", doesn't it make sense > that the documentation should only be for 3.4.1? Which means that this > create_task documentation should be reverted in the 3.4.1 documentation to > match the 3.4.1 specification. > > Second and most respectfully, why is a feature being added in 3.4.2? I > thought this kind of release (3.4.1 to 3.4.2) was for bug fixes and > security issues, not new features. Unless create_task was in the original > 3.4 specification, I argue that create_task belongs in 3.5. In it's place, > a recipe of running tasks in parallel fashion per gvanrossum's suggestion > of asyncio.async() could be added. > > ---------- > > _______________________________________ > Python tracker <report@bugs.python.org> > <http://bugs.python.org/issue22112> > _______________________________________ > |
|||
| msg224553 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2014年08月02日 11:19 | |
Here is a a patch which replaces loop.create_task(coro) with asyncio.async(coro), mention that asyncio.async() can be used to scheduler a coroutine, and make it clear that create_task() is only available in Python 3.4.2 and later. Does it look better? If it's possible, I would prefer to have exactly the same documentation in Python 3.4 and 3.5. |
|||
| msg224580 - (view) | Author: Guido van Rossum (gvanrossum) * (Python committer) | Date: 2014年08月02日 18:48 | |
Looks good! On Sat, Aug 2, 2014 at 4:19 AM, STINNER Victor <report@bugs.python.org> wrote: > > STINNER Victor added the comment: > > Here is a a patch which replaces loop.create_task(coro) with > asyncio.async(coro), mention that asyncio.async() can be used to scheduler > a coroutine, and make it clear that create_task() is only available in > Python 3.4.2 and later. > > Does it look better? > > If it's possible, I would prefer to have exactly the same documentation in > Python 3.4 and 3.5. > > ---------- > keywords: +patch > Added file: http://bugs.python.org/file36203/doc_create_task.patch > > _______________________________________ > Python tracker <report@bugs.python.org> > <http://bugs.python.org/issue22112> > _______________________________________ > |
|||
| msg225170 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2014年08月10日 23:11 | |
New changeset d0ea92701b1e by Victor Stinner in branch '3.4': Issue #22112, asyncio doc: replace loop.create_task(coro) with http://hg.python.org/cpython/rev/d0ea92701b1e New changeset 18a311479e8b by Victor Stinner in branch 'default': (Merge 3.4) Issue #22112, asyncio doc: replace loop.create_task(coro) with http://hg.python.org/cpython/rev/18a311479e8b |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:06 | admin | set | github: 66310 |
| 2014年08月10日 23:11:53 | vstinner | set | status: open -> closed resolution: fixed |
| 2014年08月10日 23:11:38 | python-dev | set | nosy:
+ python-dev messages: + msg225170 |
| 2014年08月02日 18:48:49 | gvanrossum | set | messages: + msg224580 |
| 2014年08月02日 11:19:44 | vstinner | set | files:
+ doc_create_task.patch keywords: + patch messages: + msg224553 |
| 2014年07月31日 17:11:15 | gvanrossum | set | messages: + msg224429 |
| 2014年07月31日 16:51:32 | pydanny | set | messages: + msg224427 |
| 2014年07月31日 09:04:33 | vstinner | set | messages: + msg224388 |
| 2014年07月31日 03:48:18 | gvanrossum | set | messages: + msg224378 |
| 2014年07月31日 03:10:56 | pydanny | set | files:
+ Screen Shot 2014年07月30日 at 8.13.12 PM.png messages: + msg224377 |
| 2014年07月31日 02:47:33 | gvanrossum | set | messages: + msg224376 |
| 2014年07月31日 02:40:18 | pydanny | create | |