同时运行gevent进程和服务器

use*_*820 4 python gevent bottle

如何运行一个给定的模块给定我想同时运行一些不一定使用路由的功能(可能是守护进程服务),同时运行应用服务器?

例如:

#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'
Run Code Online (Sandbox Code Playgroud)

主要之后我必须使用上面这样的吗?

gevent.joinall(gevent.spawn(alarm))

app.run(....)
Run Code Online (Sandbox Code Playgroud)

要么

gevent.joinall((gevent.spawn(alarm),gevent.spawn(app.run)))
Run Code Online (Sandbox Code Playgroud)

目标是像守护进程服务一样运行这些警报,执行其工作并暂停,而其他服务操作照常工作.服务器也应该同时启动.如果我不在正确的轨道上,请纠正我.

cza*_*doz 5

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'
Run Code Online (Sandbox Code Playgroud)