In my last post I spoke about concurrency with asyncio. Now what if you don’t want to concern yourself with async/await practices and just want to write synchronous code that executes I/O asynchronously? That’s where the library gevent comes in. It does this by modifying Python’s standard library during runtime to call it’s own asynchronous versions.
Last post code’s example written in
# The first two lines must be called before # any other modules are loaded import gevent from gevent import monkey; monkey.patch_all() import time def think(duration): print("Starting to think for " + str(duration) + " seconds...") time.sleep(duration) print("Finished thinking for " + str(duration) + " seconds...") gevent.wait([ gevent.spawn(think, 5), gevent.spawn(think, 2) ])
Notice that the function
think is written the same as the synchronous version.
gevent is written on top of C libraries
libuv . This combined with the monkey patching can make
gevent based applications hard to debug if something goes wrong. Otherwise it’s a great tool to quickly take advantage of concurrency.