falcon api 使用 gunicorn WORKER TIMEOUT Raspberry Pi

falcon api using gunicorn WORKER TIMEOUT Raspberry Pi

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 时,它会正确更改 return 值,但一段时间后我在控制台上收到以下错误并且变量值被重置

[CRITICAL] WORKER TIMEOUT (pid:8545)

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

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

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

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

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