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, написанное комьюнити