内容简介:flask项目引入了flask-socketio提供websocket通信,同时需要flask-apscheduler完成定时任务。项目初期只有socketio,并且以gunicron运行后来要引入apscheduler
说明
flask项目引入了flask-socketio提供websocket通信,同时需要flask-apscheduler完成定时任务。
问题描述
项目初期只有socketio,并且以gunicron运行
gunicorn --worker-class eventlet -w 1 zhima_chat:app -b 0.0.0.0:5000 --access-logfile -
后来要引入apscheduler
以上面的方式运行,出现了问题。该如何将socketio与apschedeuler结合呢?
解决方法
问题的原因是socketio是异步io,而apscheduler是阻塞运行,两者当然不能一起运行
比较好的方法,把apscheduler放到新线程中. 异步io虽然要求不能阻塞主进程,但是我可以弄个新线程
start_background_task的原理是启动了一个eventlet的线程
注意: job中不能有导致阻塞的包,确保都被绿化
from flask_apscheduler import APScheduler
def start_jobs(socket_io):
"""
后台线程
:param socket_io:
:return:
"""
socket_io.start_background_task(target=_jobs)
def _jobs():
from xxxxx.scheduler import Config
scheduler_app = APScheduler()
for job in Config.JOBS:
scheduler_app.add_job(**job)
scheduler_app.start()
如果apscheduler用到socketio,提示上下文错误,用这个
from xxxx import app
with app.app_context():
emit("chat_unread", data, room=sid, namespace=namespace)
发现的坑
用过一段时候后,发现了一些奇怪的问题,协程中最好不要再用线程
来源
http://www.yongqingking.top/flask/2019/04/08/socketio-apscheduler.html
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTTP Essentials
Stephen A. Thomas、Stephen Thomas / Wiley / 2001-03-08 / USD 34.99
The first complete reference guide to the essential Web protocol As applications and services converge and Web technologies not only assume HTTP but require developers to manipulate it, it is be......一起来看看 《HTTP Essentials》 这本书的介绍吧!