N
N
nirvimel2015-12-19 14:15:08
Python
nirvimel, 2015-12-19 14:15:08

Reference example of gevent TCP server with process fork and daemonization. Where can you see it?

Возьмем классический сценарий: сервер демонизируется, создает сокет, начинает его слушать, форкается для порождения воркеров, мастер процесс закрывает свою копию сокета, общается по средством сигналов с дочерними процессами, воркеры обслуживают свои копии сокета и ждут команд (сигналов) от мастера.
Я не нашел на эту тему официального примера от gevent. У gevent вообще много проблем с документацией. На Гитхабе есть проекты, в разной степени реализующие данный сценарий, но соответствующий код сильно отличается и у них куча issues касательно именно применения gevent в данном сценарии.

  1. tproxy - целостный проект, по-своему реализующий данный сценарий, достаточно объемный, пока разбираюсь в нем.
  2. geventdaemon - отдельная библиотека для демонизации gevent, наследуется от DaemonContext (почему остальные не идут по этому пути?), непрозрачно как-то.
  3. Пример иллюстрирует форк и gevent.server.StreamServer (вместо прямых операций с сокетом), почему именно такая реализация? можно ли доверять автору? если этот простой вариант не имеет подводных камней, то почему остальные не используют StreamServer?
  4. Еще одна полностью оригинальная реализация.
  5. И еще один полностью оригинальный пример.

All these projects have little in common with each other, each approaches the problem in a completely different way, most of the code is quite voluminous, the logic related directly to this scenario is spread over the code and mixed with applied logic, which is not of particular interest to me.
So what is the right way to daemonize and fork the server and interact with the master process with the workers?

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question