python - 同时运行gevent进程和服务器

标签 python bottle 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'

我必须在 ma​​in 之后像这样使用上面的内容吗?

gevent.joinall(gevent.spawn(alarm))

app.run(....)

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

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

最佳答案

Gevent 自带 WSGI 服务器,所以真的没有必要使用 app.run。服务器是:

两者提供相同的接口(interface)。

您可以使用这些来实现您想要的:

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'

关于python - 同时运行gevent进程和服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019259/

相关文章:

python - 统一洗牌 5 GB 的 numpy 数据

python - 在Python中使用协同程序正确捕获语法错误

python - Bottle 框架和 OOP,使用方法而不是函数

python - Python Web 开发中的装饰器与类

带 celery 的 django-socketio : send to socket after async task completes in separate process

python - 数据均值/方差的变化会影响svm分类器吗?

python - GNU 并行和 Python atexit

python - 用 bottle.py 读取 POST 正文

python - 在 Python 中调用并等待(一段时间)异步事件

c++ - 使用tornado的分布式游戏服务器