Mam aplikację gevent, która spawnuje wiele greenletów w wielu modułach. Chcę być w stanie z wdziękiem zamknąć aplikację (wewnętrznie lub przez złapanie na przykład SIGTERM
), pozwalając, aby greenlety ładnie się zakończyły, łowiąc GreenletExit
i wykonując klauzule finally:
.W geenie, w jaki sposób mogę zabić wszystkie uruchomione greenlety?
Gdybym miał jeden z wszystkich działających greenletów, mógłbym zrobić gevent.killall(list_of_greenlets)
, ale utrzymanie takiej listy jest raczej kłopotliwe; poza tym, gevent musi zachować tę listę w takiej czy innej formie.
Czy mogę zabić wszystkie zielone warzywa, które zostały uruchomione bez prowadzenia ich listy?
(używam gevent 1.0.0 na Pythona 2.7 raspbian)
Potrzebujemy więcej szczegółów na temat wdrażania zielonych produktów. Czy korzystasz z puli, f.e.? Może '' 'gevent.shutdown()' '' działa dla ciebie? – dorvak
Większość modułów będzie używać po prostu 'gevent.spawn()', ale niektóre mogą używać puli lub cokolwiek innego. Ponadto, nie ma "gevent.shutdown()" w wersji 1.0.0, a nawet gdyby istniało, nie można go uruchomić z innej niż główna greenletu, a obsługa sygnału jest bardziej niż prawdopodobne, że skończy się na innej. – squirrel