GEVENT 프로세스 및 서버를 동시에 실행하십시오
문제
주어진 모듈을 실행하는 방법 동시에 앱 서버를 실행하는 동시에 라우팅 (데몬 서비스 일 수 있음)을 동시에 실행하려는 일부 기능을 실행하고 싶습니다.
예 :
#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'
. 제휴하지 않습니다 StackOverflow