gevent
Материал из Xgu.ru
gevent — сетевая библиотека, которая используя гринлеты (greenlets) предоставляет синхронное API поверх цикла событий от libevent.
Пример:
import time
import gevent
from gevent import select
start = time.time()
tic = lambda: 'at %1.1f seconds' % (time.time() - start)
def gr1():
# Busy waits for a second, but we don't want to stick around...
print('Started Polling: ', tic())
select.select([], [], [], 2)
print('Ended Polling: ', tic())
def gr2():
# Busy waits for a second, but we don't want to stick around...
print('Started Polling: ', tic())
select.select([], [], [], 2)
print('Ended Polling: ', tic())
def gr3():
print("Hey lets do some stuff while the greenlets poll, at", tic())
gevent.sleep(1)
gevent.joinall([
gevent.spawn(gr1),
gevent.spawn(gr2),
gevent.spawn(gr3),
])
Started Polling: at 0.0 seconds
Started Polling: at 0.0 seconds
Hey lets do some stuff while the greenlets poll, at at 0.0 seconds
Ended Polling: at 2.0 seconds
Ended Polling: at 2.0 seconds
В примере одновременно запускаются три функции, две из которых вызывают блокирующие вызовы select.select. В данном случае это не обычный select, а экспортированный из gevent. Вызов блокирует не весь процесс, а только соответствующий гринлет.
[править] Дополнительная информация
- Gevent Tutorial (англ.) — прекрасное руководство по gevent, написанное комьюнити