无法将Gunicorn配置为同时运行另一个循环的flask应用程序

无法将Gunicorn配置为同时运行另一个循环的flask应用程序,flask,flask-sqlalchemy,gunicorn,python-multithreading,Flask,Flask Sqlalchemy,Gunicorn,Python Multithreading,我有一个简单的烧瓶应用程序,如下所示: # app.py from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' 我也有一个懒散的机器人阅读信息 #bot.py def serve(self): while True: message, channel = self.parse_slack_output

我有一个简单的烧瓶应用程序,如下所示:

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'
我也有一个懒散的机器人阅读信息

#bot.py
def serve(self):
    while True:
            message, channel = self.parse_slack_output(self.slack_client.rtm_read())
            if message and channel:
                self.handle_message(message, channel)
            time.sleep(self.READ_WEBSOCKET_DELAY)
我希望两个代码同时运行。因此,在app.py中,我会:

#app.py
if __name__ == "__main__":
    import threading
    import bot

    flask_process = threading.Thread(target=app.run)
    bot_process = threading.Thread(target=bot.serve)
    bot_thread.start()
    flask_thread.start()
这段代码在
$python app.py
中正常工作,但当我引入
gunicorn
时,bot线程似乎不起作用

我试过:

gunicorn app:app
gunicorn --workers=2 app:app
gunicorn --threads=2 app:app
我还尝试了
多处理
库,得到了相同的结果

你知道如何解决这个问题吗?谢谢


编辑:我现在明白这个问题有多蹩脚了。我不应该在
if\uuuuuuu name\uuuuu=“\uuuuu main\uuuuuuuu”:
块中编写代码。这不是gunicorn运行的。它直接拿起应用程序并运行它。仍然需要考虑如何使其处理bot线程。

我使用以下解决方案完成了这项工作:

# app.py
from flask import Flask
import threading
import bot

def create_app():
    app = Flask(__name__)
    bot_process = threading.Thread(target=bot.serve)
    return app

app = create_app()

@app.route('/')
def hello_world():
    return 'Hello, World!'
这确保
gunicorn--workers=1 app:app
在不同的线程中运行应用程序和机器人程序。虽然这样做有效,但此解决方案的一个缺点是我无法将工作人员的数量扩展到>1。因为这不仅可以扩展应用程序线程,还可以扩展bot线程,这是我不想要的。然后,bot将在两个线程中不必要地侦听消息

你有没有更好的办法?请转达。谢谢