Вход в несколько совместных / гринлетов / микропотоков с Gevent? - PullRequest
4 голосов
/ 03 августа 2011

Каков наилучший подход к регистрации событий, которые охватывают несколько запущенных сопрограмм / микропотоков / гринлетов с использованием Python gevent?

Примеры событий, которые я хотел бы регистрировать, могут включать создание новых соединений или сброс соединений на сервере сокетов.

В рамках этой мысли - возможно ли, чтобы «порожденные» подпрограммы заносили в один файл? Это даже желательно из-за возможных одновременных попыток записи в этот файл?

1 Ответ

3 голосов
/ 03 августа 2011

Если это всего лишь один процесс, то нет, они не могут писать одновременно.Все гринлеты работают в одном потоке ОС и планируются совместно, одновременно может быть запущен только один.

with open('log', 'w') as log:
    jobs = [gevent.spawn(log.write, 'event %d' % i) for i in range(10)]
    gevent.joinall(jobs)

... приведет к тому, что гринлеты будут записывать в журнал одну за другой.

Если у вас несколько процессов, я бы предложил войти в систему redis или, возможно, использовать zeromq для входа в выделенный демон.Или используйте другой внешний демон ведения журнала.

...