Запустите процессы Gevent и сервер одновременно

StackOverflow https://stackoverflow.com//questions/24019259

  •  21-12-2019
  •  | 
  •  

Вопрос

Как запустить данный модуль, приведенный мной, я хочу выполнить некоторые функции одновременно, которые не обязательно используют маршрутизацию (могут быть услугами демона), одновременно одновременно выполняющий сервер приложений?

Например:

#some other route functions app.post(...)

#some other concurrent functions

def alarm():
    '''
    Run this service every X duration
    '''
    ALARM = 21 
    try:
        while 1:
            #checking time and doing something. Then finding INTERVAL
            gevent.sleep(INTERVAL)
    except KeyboardInterrupt,e:
        print 'exiting'
.

Должен ли я использовать вышеупомянутое то, как main ?

gevent.joinall(gevent.spawn(alarm))

app.run(....)
.

или

gevent.joinall((gevent.spawn(alarm),gevent.spawn(app.run)))
.

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

Это было полезно?

Решение

Gevent поставляется с собственными серверами WSGI, поэтому действительно не нужно использовать app.run.Серверы:

Оба предоставляют один и тот же интерфейс.

Вы можете использовать их для достижения того, что вы хотите:

import gevent
import gevent.monkey
gevent.monkey.patch_all()

import requests

from gevent.pywsgi import WSGIServer


# app = YourBottleApp

def alarm():
    '''
    Run this service every X duration
    '''
    ALARM = 21 
    while 1:
        #checking time and doing something. Then finding INTERVAL
        gevent.sleep(INTERVAL)


if __name__ == '__main__':
    http_server = WSGIServer(('', 8080), app)
    srv_greenlet = gevent.spawn(http_server.serve_forever)
    alarm_greenlet = gevent.spawn(alarm)

    try:
        gevent.joinall([srv_greenlet, alarm_greenlet])
    except KeyboardInterrupt:
        http_server.stop()
        print 'Quitting'
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top