无法将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将在两个线程中不必要地侦听消息
你有没有更好的办法?请转达。谢谢