mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-11-23 00:26:30 -05:00
1.3 KiB
1.3 KiB
title | date | draft | tags | medium_enabled | |
---|---|---|---|---|---|
Simple Async in Python with Gevent | 2020-04-09T17:22:52-04:00 | false |
|
true |
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 gevent
.
# 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 libev
or 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.