문제

주어진 모듈을 실행하는 방법 동시에 앱 서버를 실행하는 동시에 라우팅 (데몬 서비스 일 수 있음)을 동시에 실행하려는 일부 기능을 실행하고 싶습니다.

예 :

#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)))
.

객체는 데몬 서비스와 같은 이러한 알람을 실행하고, 작업 및 스누즈를 수행하면서 휴식을 취하고 평소와 같이 작동합니다. 서버는 동시에 시작해야합니다.오른쪽 트랙에없는 IM이 아닌 경우 나를 바로 잡으십시오.

도움이 되었습니까?

해결책

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