0
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)

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

4

1 回答 1

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 服务器,并且它的输入电压有点低于最佳值,并导致工作人员超时问题。修复电压解决了这个问题。

于 2017-06-04T06:12:03.793 回答