В моем проекте используется gevnet, что для меня ново, для реализации бережливого сервера.gevent, способы запуска запуска новых задач spawn
Я читаю код и изучаю его документ. Ниже приведен фрагмент кода в моем проекте:
TSocket.socket = gevent.socket # I find this when comparing the production
# code and mine. It seems that this socket
# schedule the tasks when there are newly-spawn ones.
# Could someone tell me more about it?
while True:
try:
client = self.serverTransport.accept()
gevent.spawn(self._serve_client, client)
except (SystemExit, KeyboardInterrupt):
break
except Exception as x:
logging.exception(x)
После нереста он непосредственно заканчивает работу здесь.
Но в моей собственной реализации, которая является для самостоятельного обучения, я должен сделать следующее:
while True:
try:
client = self.serverTransport.accept()
gevent.spawn(self._serve_client, client)
gevent.sleep(0) # switch to the newly-spawn task.
# this makes it to process tasks one by one and
# this makes it non-concurrent
except (SystemExit, KeyboardInterrupt):
break
except Exception as x:
logging.exception(x)
В моем производстве код, я не нашел ни малейшего представления о том, как запускать задачи на запустить. Итак, я прошу здесь немного рассказать о способах запуска новых задач на сервере выше.
Вы имеете в виду, что после патча кода gevent.socket будет контролировать цикл gevent. Как только появится новая зеленая зелень, она планирует ее запустить? – Alex
Не совсем. Я имею в виду, что до тех пор, пока сокет gevent «активен», то есть он принимает или отправляет данные, цикл gevent будет работать. Например, если сокет заблокирован при вызове приема, и вы создаете новую грибочку, она будет запланирована, иначе нет. – mguijarr
В вашем примере сокет представляет собой реорганизацию данных, т. Е. Порожденная зелень - это репликация данных. Согласно моему пониманию gevent, операция ввода-вывода переключит зелья. Если в это время появится новая зелень. Затем, после своего нереста, gevent немедленно переключится на новую зелень. Я здесь? – Alex