falcon api使用gunicorn WORKER TIMEOUT Raspberry Pi

时间:2017-06-03 17:56:21

标签: python api raspberry-pi gunicorn falconframework

import falcon
global_var=False

class set_gv(object):
    def on_get(self, req, res):
        """Handles all GET requests."""
        res.status = falcon.HTTP_200  # This is the default status
        global global_var
        global_var=not global_var
        res.body = (str(global_var))

class ask_gv(object):
    def on_get(self, req, res):
        """Handles all GET requests."""
        res.status = falcon.HTTP_200  # This is the default status
        res.body = str(global_var)

# Create the Falcon application object
app = falcon.API()

# Instantiate the TestResource class
set = set_gv()
get = ask_gv()

# Add a route to serve the resource
app.add_route('/set', set)
app.add_route('/get', get)

我正在使用带有gunicorn和上面代码的Falcon框架来托管一个API来保存变量并使用带有命令的API调用来更改和检索它

`gunicorn -b 0.0.0.0:5000 main:app --reload` 

当我打开http://localhost/set时,它会正确更改并返回值,但过了一段时间后我在控制台上出现以下错误并且重置了可变值

[CRITICAL] WORKER TIMEOUT (pid:8545)

有关如何解决此问题的任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

所以我发现工作进程仍然超时并在一段时间后重新启动但我能够通过以下方式解决问题:

我没有定义一个在每次超时后重置的全局变量,而是使用pickle模块将变量值保存在磁盘上并更改它并分别用每个set和get调用它来读取它。

import pickle
f = open('store.pckl', 'wb')
pickle.dump(False, f)
f.close()

class set_gv(object):
    def on_get(self, req, res):
        """Handles all GET requests."""
        res.status = falcon.HTTP_200  # This is the default status
        f = open('store.pckl', 'rb')
        obj = not pickle.load(f)
        f.close()
        f = open('store.pckl', 'wb')
        pickle.dump(obj, f)
        f.close()
        res.body = (str(obj))

class ask_gv(object):
    def on_get(self, req, res):
        """Handles all GET requests."""
        res.status = falcon.HTTP_200  # This is the default status
        f = open('store.pckl', 'rb')
        obj = pickle.load(f)
        f.close()
        res.body = (str(obj))

我增加了3名工人以确保正常运行时间。

gunicorn -b 0.0.0.0:5000 main:app --reload --workers=3

更新:我能够解决工作超时问题,我在Raspberry Pi上运行api服务器并且它的输入电压略低于最佳值并导致工作者超时问题。修复电压解决问题。