Hi Victor,

Autobahn, a WebSocket/WAMP library supports running on top of Twisted or asyncio (and Trollius for Py2):

https://github.com/crossbario/autobahn-python

It does that using 1 code base.

This is possible by virtue of txaio

https://github.com/crossbario/txaio#platform-support
https://travis-ci.org/crossbario/txaio/builds/104293274

(As you note, one code base is only possible when avoiding yield - which we do inside Autobahn).

Autobahn has 25k downloads per month on PyPi, and is used in production in different other software packages.

I don't know how many users are using it on Py2 with asyncio/Trollius - but it's nice that users can choose any combination of Twisted, asyncio, Py2 and Py3.

Thanks for Trollius!

Cheers,
/Tobias


Am 25.01.2016 um 21:45 schrieb Victor Stinner:
Hi,

Short story: I don't want to maintain Trollius anymore. If anyone is
using it, please say it. Otherwise, I will simply make it clear that
Trollius must not be used anymore.

Since almost no library support Trollius, I'm not sure that it's
possible to build an application on top of it. For example, there is
no HTTP client for Trollius!

--

Long story.

Two years ago, I wrote the Trollius project for OpenStack. I ported
asyncio to Python 2.6. When I wrote it, my main motivation was to
replace implicit task switching *and* port OpenStack to Python 3.
OpenStack uses eventlet and eventlet didn't support Python 3.

In the meanwhile, eventlet was ported to Python 3 (I helped to port it
;-)), and it became clear to me that OpenStack is too big to replace
eventlet with anything else (replacing eventlet with threads was also
discussed). I mean, it's too much work for a negligible gain, with a
high risk of regression, for such large project. For all these
reasons, I stopped to work on Trollius.

My goal was to support asyncio and trollius in a single code based for
the application code, but also for libraries. In practice, there are
important technical issues for that. asyncio coroutine uses "result =
yield from coro" whereas trollius coroutine uses "result = yield
From(coro)". I added "From()" to trollius to ease the transition from
Trollius to asyncio, the function is a no-op (it returns the coroutine
unchanged).

Since "yield from" raises a SyntaxError on Python 2, it's really hard
to write coroutines in a single file for Trollius (yield, Python 2)
and asyncio (yield from, Python 3).

Authors of recent libraries written for asyncio said clearly that they
don't want to support Trollius to have a clean code base. Some
libraries (like Pulsar) already supporting Twisted and Tornado added
support for trollius.

In short, very few libraries support trollius, and I don't think that
it's going to change. I only know trollius-redis, an explicit port of
an asyncio library (asyncio-redis) to Trollius.
https://trollius.readthedocs.org/libraries.html

--

Using asyncio with Python 3, it rocks ;-) It now has a wide choice of libraries!

Victor


Reply via email to