On Thu, Dec 19, 2013 at 8:17 AM, Marc Schlaich <[email protected]> wrote:
> Hey,
>
> this is nice :-) I have a few questions/proposals:
>
> - Would you consider moving to GitHub to attract (more) contributors,
> including myself?

Perhaps you could consider learning a different source control system
as a learning opportunity? :-)

> - concurrent.futures is already backported:
> https://pypi.python.org/pypi/futures. You should completely drop this and
> make it an (optional?) dependency.

Hm, but Python 3 Tulip/asyncio doesn't actually use concurrent.futures
(except for a few constants and exceptions). I presume the backport
shouldn't either.

> - I would directly wrap coroutines in tasks in the decorator, this should
> simplify things.

Beware, the goal here is to easy forward porting the code to Python 3.

> - Using yield instead of yield from offers a nice syntax style to wait for
> parallel execution of coroutines/tasks:
>
>     twitter_data, fb_data = yield (
>         async_http_request('http://twitter.com/...'),
>         async_http_request('http://facebook.com./...'),
>     )
>
>   This needs to be enabled in the scheduler. What do you think?

I would prefer not to do this, because you can't do that with
yield-from in Python 3.

> I'm going to have a look at the code and failing tests later.
>
> Marc
>
> On Wednesday, December 4, 2013 11:15:52 PM UTC+1, Victor Stinner wrote:
>>
>> Hi,
>>
>> I spend a few hours to try to backport Tulip on Python 2.7.
>>
>>    https://bitbucket.org/haypo/tulip_py2
>>
>> I copied ayncio, selectors and concurrent.futures modules from Python 3.4.
>>
>> First commits are basic Python 3 => Python 2 fixes:
>>
>> - Remove keyword-only parameter marker ("*")
>> - Remove suppression of exception context ("raise ... from None")
>> - Adapt metaclass syntax
>> - Fix def func(*args, key=default) syntax
>> - Fix print() syntax: use from __future__ import print_function
>> - Fix imports for Python 2 (queue => Queue)
>> - Fix super() syntax
>> - Replace list.clear() with "del list[:]"
>>
>> Now, the interesting changes:
>>
>> - Replace "yield from ..." with "yield ..."
>> - Replace "return value" with "returnValue(value)" (warning: "return
>> x, y" must be replaed with returnValue((x, y))
>> - Backport InterruptedError and BlockingIOError exceptions (add them
>> directly into builtins, this hack should be fixed later)
>> - Wrap socket operations to replace socket.error(EINPROGRESS) with
>> BlockingIOError (at runtime)
>> - Modify Task._step() to handle generators: wrap generator into a new Task
>>
>> I copied returnValue() name from Twisted @inlineCallbacks. Antoine
>> noted that the name is not PEP 8 compliant and proposed "yield
>> Return(...)" :-)
>>
>> I ran basic examples (hello world, ping client/server), they work on
>> my backport with Python 2.7.
>>
>> They are maybe real blocker issues in this backport with generators /
>> coroutines / Taks / ..., but I'm happy to have a working proof of
>> concept after a few hours.
>>
>> Victor



-- 
--Guido van Rossum (python.org/~guido)

Reply via email to