Flask uWSGI上的烧瓶插座
我有这个烧瓶socketio应用程序Flask uWSGI上的烧瓶插座,flask,uwsgi,flask-socketio,Flask,Uwsgi,Flask Socketio,我有这个烧瓶socketio应用程序 (venv) ubuntu@ip-172-31-18-21:~/code$ more app.py from flask_socketio import SocketIO, send, emit from flask import Flask, render_template, url_for, copy_current_request_context from time import sleep from threading import Thread,
(venv) ubuntu@ip-172-31-18-21:~/code$ more app.py
from flask_socketio import SocketIO, send, emit
from flask import Flask, render_template, url_for, copy_current_request_context
from time import sleep
from threading import Thread, Event
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, async_mode='gevent')
thread = Thread()
thread_stop_event = Event()
def firstFunction():
print("*** First function")
def backgroundTask():
while not thread_stop_event.isSet():
socketio.emit('bg-socketio', {'data':'background-data'}, namespace='/', broadcast=True)
socketio.sleep(2)
def startBackgroundTask():
global thread
if not thread.is_alive():
thread = socketio.start_background_task(backgroundTask)
@app.route('/')
def main():
return render_template('index.html', title='SocketIO')
@socketio.on('connect_event', namespace='/')
def handle_message_client_connected(message):
print("*** Client connected")
emit('c-socketio', {'data':' you connected!'}, namespace='/')
if __name__ == '__main__':
firstFunction()
startBackgroundTask()
socketio.run(app, host='0.0.0.0', port=5000)
我希望firstFunction()和startBackgroundTask()在应用程序启动时运行
在uWSGI上运行此功能的最佳实践是什么?
我一直试图这样做,但没有成功,不断地出错
错误:
*正在运行gevent循环引擎[addr:0x5561d3f745a0]*
该死工人1(pid:13772)死亡:(试图重生。。。
工人重生太快了!!!我不得不睡一会儿(2秒)。。。
新生的uWSGI工人1(新pid:13773)
我也试过这个
uwsgi --socket 0.0.0.0:5000 --protocol=http --enable-threads -w wsgi:app
(venv) ubuntu@ip-172-31-18-21:~/code$ more wsgi.py
from uapp import app
if __name__ == "__main__":
app.run()
将uapp.py更改为
if __name__ == '__main__':
firstFunction()
startBackgroundTask()
app.run(host='0.0.0.0', port=5000)
但这不会运行firstFunction()或startBackgroundTask()
我被卡住了,正在寻找一些建议。你的问题的简单答案是改变这个:
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
第一个函数()
startBackgroundTask()
应用程序运行(主机=0.0.0.0',端口=5000)
为此:
firstFunction()
startBackgroundTask()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
应用程序运行(主机=0.0.0.0',端口=5000)
不过,你还有一些其他问题需要解决
async_mode
变量设置为gevent
,但您正在将uWSGI用作服务器。请将其更改为gevent_uWSGI
,或将其删除,以便在运行时为您自动设置
使用uWSGI启动Flask SocketIO应用程序的命令如文档所示:
uwsgi --http :5000 --gevent 1000 --http-websockets --master --wsgi-file app.py --callable app
您还需要安装
gevent
。您的问题的简单答案是更改此选项:
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
第一个函数()
startBackgroundTask()
应用程序运行(主机=0.0.0.0',端口=5000)
为此:
firstFunction()
startBackgroundTask()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
应用程序运行(主机=0.0.0.0',端口=5000)
不过,你还有一些其他问题需要解决
async_mode
变量设置为gevent
,但您正在将uWSGI用作服务器。请将其更改为gevent_uWSGI
,或将其删除,以便在运行时为您自动设置
使用uWSGI启动Flask SocketIO应用程序的命令如文档所示:
uwsgi --http :5000 --gevent 1000 --http-websockets --master --wsgi-file app.py --callable app
您还需要安装
gevent
。没有使用我用'pip install gevent'安装的gevent 20.5.2。更改为gevent==1.4.0
,现在它按预期启动。没有使用我用'pip install gevent'安装的gevent 20.5.2。更改为gevent==1.4.0
,nuWSGI如何按预期启动。您是否考虑过使用APScheduler
模块?尝试了APScheduler,但SocketIO-emit消息延迟了约25秒。“SocketIO.emit”命令现在位于backgroundTask()中,计划每1秒使用“sched.add”作业运行一次(背景任务,“间隔”,秒=1)'您能在OP中更新相同的代码吗?您读过关于在uWSGI上运行Flask SocketIO的文档吗?您的uWSGI start命令完全错误,而且您正在强制执行async\u mode='gevent'
,这将不适用于uWSGI。您考虑过使用APScheduler
模块吗?尝试过APScheduler,并且能够做出一些改进ng工作,但SocketIO emit消息延迟约25秒。“SocketIO.emit”命令现在位于backgroundTask()中,计划每1秒使用“sched.add_作业”(backgroundTask,'interval',seconds=1)运行一次'你能在OP中更新相同的代码吗?你读过关于在uWSGI上运行Flask SocketIO的文档吗?你的uWSGI start命令完全错误,而且你正在强制执行async\u mode='gevent'
,这不适用于uWSGI。我做了更改,并且得到了该死的worker 1错误。gevent已安装:gevent==20.5.2 gevent websocket==0.10.1 python socketio==4.6.0 uwsgi版本是2.0.18,在Ubuntu 18.0.4上。我还删除了firstFunction()和startBackgroundTask()所以这只是flask SocketIO我选择设置新的EC2 t2.micro Ubuntu 18.04实例以重新开始。我正在执行flask SocketIO的步骤1-3,然后执行uWSGI,如图所示。我马上得到该死的!工人1(pid:30699)死了:(尝试重生…工人重生太快了!!!我必须睡一会儿(2秒)…
错误。在EC2 t2.micro实例上执行此操作是否有问题?感谢您的建议。您是否修复了异步模式
参数?是的,我从flask导入flask,从flask中呈现了模板\u socketio导入socketio app=flask(名称)app.config['SECRET\u KEY']=“SECRET!”socketio=socketio(app)如果name='main':app.run(主机='0.0.0',端口=5000)然后在日志中寻找其他线索,不确定还有什么建议。如果你在问题中添加完整的日志,我很乐意看一看。我做了更改,得到了该死的worker 1错误。Gevent已安装:Gevent==20.5.2 Gevent websocket==0.10.1 python socketio==4.6.0 uwsgi版本是2.0.18,在Ubuntu 18.0.4上。我也先删除了它函数()和startBackgroundTask(),所以这只是flask socketioI选择设置新的EC2 t2.micro Ubuntu 18.04实例以重新开始。我遵循flask SocketIO的步骤1-3,然后执行uWSGI,如图所示。我立即得到该死的!worker 1(pid:30699)死亡:(正在尝试重新启动…工人重新启动太快!!!我必须睡一会儿(2秒).
错误。在EC2 t2.micro实例上执行此操作是否有问题?感谢您的建议。您是否修复了异步\u模式
参数?是的,我从flask导入flask,从flask\u socketio导入socketio app=flask渲染了模板(name)app.config['SECRET\u KEY']='SECRET!'socketio=socketio(app)如果name='main':app.run(host='0.0.0',port=5000),那么在日志中查找其他线索,不确定还有什么建议。如果您在问题中添加了完整的日志,我们很乐意看一看。