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, написанное комьюнити
Источник — «http://xgu.ru/wiki/gevent»