HN user

denik

140 karma
Posts12
Comments27
View on HN

Surfly (http://www.surfly.com) - Amsterdam, the Netherlands - Full-Time [Will relocate/Arrange work permit]

We are looking for a Senior Software Developer for full-time employment. You will be part of the core team helping to build and architect the backend of our main product.

Surfly provides the easiest way to share a web page or a document on the web. Unlike traditional screen sharing it requires no installation or browser plugins and is limited to a web page rather than the whole screen. By using a smart content-rewriting proxy we allow any website to be shared, without website owners having to change them in any way.

More about the job: http://www.surfly.com/jobs/

Reach me at denis@surfly.com

> Implicit stack coroutines (like greenlets) can always be built on top if necessary, but they tend to require horrible things like monkey patching to work together with existing synchronous, blocking code.

that's not true. monkey patching is an optional feature that you can use with greenlet-based libraries, but you don't have to.

compare that to inlineCallbacks, where you don't have that option.

Amsterdam, the Netherlands - SiteSupport Services B. V. - Senior Python developer.

We are looking for an experienced Python developer for full-time employment. You will be part of the core team helping to build and architect the backend of our main product.

We're a funded startup located in Amsterdam, the Netherlands, developing a web based co-browsing tool that will greatly simplify online support and sales.

We offer competitive salary, good benefits, such as reimbursed conference (e.g. PyCon) travel, reimbursed costs of relocation to Amsterdam, help with getting Netherlands' work permit for those outside EU.

Job requirements: http://www.python.org/community/jobs/#sitesupport-services-b...

Libev and libevent 15 years ago

There are 2 possible ways for the next release a) conservative - use libevent's http on top of libev-libevent emulation b) reimplement them; maybe start with an http server that already uses libev, like bjoern

Conservative option might be chosen as a temporary solution if release 0.14 is delayed for too long otherwise.

I mentioned mysql-connector as an example of a complex enough library that runs with gevent via monkey patching (in reply to "gevent only solves the most simple conversions by monkey patching", which is wrong).

Have you tried gevent-MySQL? It's written in Cython and as far as I know is fast.

Monkey patching is not mandatory. 3rd party modules can be "ported" to gevent manually as well. It's a matter of preference probably. Would like to know what better solutions you have in mind.

not sure if counts as large-scale but omegle.com uses gevent. 9257 users online currently.

Thanks!

Your concern is valid though, if the database module is a wrapper around C library which uses blocking sockets, each database call will block the whole interpreter, not just a particular greenlet.

This is not specific to gevent thought. Tornado and Twisted face the same problem and Twisted has a threadpool to cope with that. I guess I would have to implement something similar for gevent.

However, if the database module was a pure Python or used libevent underneath then it would integrate with gevent seamlessly. Alas, it's rarely the case for database modules (?)

I'm working on improving eventlet: http://devel.ag-projects.com/~denis/eventlet/

Eventlet is a networking library that uses greenlet, Python implementation of coroutines [http://codespeak.net/py/0.9.2/greenlet.html] to handle asynchronous events in a synchronous way. Greenlet can be thought as an analogue to Python's enhanced generator, however, without "yield" keyword and the limitations it brings.

For the applications that are network-bounded it effectively brings Erlang-like scalability in Python: you can spawn as many greenlets as you like (they're cheap) (e.g. one or several per incoming connection), control their execution, etc.

If that sounds unclear, just look at the examples:

http://devel.ag-projects.com/~denis/cgi-bin/hgweb.cgi/file/t... http://devel.ag-projects.com/~denis/cgi-bin/hgweb.cgi/file/t... http://devel.ag-projects.com/~denis/cgi-bin/hgweb.cgi/file/t...

Compared to the original eventlet (home - http://wiki.secondlife.com/wiki/Eventlet) our branch has - a number of bugs fixed and "onions" removed - twisted integration - you can use any twisted reactor or twisted protocol or any other feature you like (this part is heavily influenced by corotwine) - proc module for advanced coroutine control (spawn, link, waitall, etc)