eventlet

How to setup flask-socketio in a docker container?

纵饮孤独 提交于 2021-02-07 19:41:30
问题 Hello I'm trying to setup flask-socketio in a docker container. It seems to run but I get an error( from the browser) when I try to access localhost on port 5000 like I'm used to do with flask apps. It say's: unable to connect! I will show you the 5 important files: Dockerfile, requirements.txt, docker-compose.yml, web_app.py and index.html Dockerfile: FROM python:3.6.5 WORKDIR /code COPY * /code/ RUN pip install -r requirements.txt requirements.txt: Flask==1.0.2 Flask-SocketIO==3.0.1

raise RuntimeError('You need to use the eventlet server. '

强颜欢笑 提交于 2020-05-15 04:48:48
问题 In my project, I created a app : the website_chat/views.py code: async_mode = 'eventlet' import os from django.http import HttpResponse import socketio basedir = os.path.dirname(os.path.realpath(__file__)) sio = socketio.Server(async_mode=async_mode) thread = None the website_chat/management/commands/runserver.py : from django.core.management.commands.runserver import Command as RunCommand from xxx/website_chat.views import sio class Command(RunCommand): help = 'Run the Socket.IO server' def

python使用redis和celery

ⅰ亾dé卋堺 提交于 2020-04-28 05:44:38
redis数据库 # 1.安装redis与可视化操作工具 # 选择安装路径、圈中默认配置环境变量 # 2.在服务中管理redis服务器的开启关闭 # 3.命令行简单使用redis: -- redis-cli # 启动客户端 -- set key value # 设置值 -- get key # 取出值 # 4.redis支持:字符串、字典、列表、集合、有序集合 # https://www.runoob.com/redis/redis-tutorial.html # 5.特点:可持久化、单线程单进程并发、内存中的数据库(效率高) python使用redis 依赖 >: pip3 install redis 直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 连接池使用 import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool) 缓存使用 安装django依赖 pip install django-redis # 1.将缓存存储位置配置到redis中:settings.py CACHES = { "default": { "BACKEND": "django

Celery框架 接口缓存, Celery框架, Django项目实现轮播图缓存更新

a 夏天 提交于 2020-04-28 05:09:06
接口缓存 """ 1)什么是接口的后台缓存 前台访问后台接口,后台会优先从缓存(内存)中查找接口数据 如果有数据,直接对前台响应缓存数据 如果没有数据,与(mysql)数据库交互,得到数据,对前台响应,同时将数据进行缓存,以备下次使用 了解:前台缓存 - 前台在请求到接口数据后,在前台建立缓存,再发送同样请求时,发现前台缓存有数据,就不再对后台做请求了 2)什么的接口会进行接口缓存 i)接口会被大量访问:比如主页中的接口,几乎所有人都会访问,而且会重复访问 ii)在一定时间内数据不会变化(或数据不变化)的接口 iii)接口数据的时效性不是特别强(数据库数据发生变化了,不是立即同步给前台,验后时间同步给前台也没事) 注:理论上所有接口都可以建立缓存,只要数据库与缓存数据同步及时 3)如何实现接口缓存:主页轮播图接口 """ Celery框架 独立进程,独立线程 官方 Celery 官网: http://www.celeryproject.org/ Celery 官方文档英文版: http://docs.celeryproject.org/en/latest/index.html Celery 官方文档中文版: http://docs.jinkan.org/docs/celery/ Celery异步任务框架 """ 1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket

celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)

余生颓废 提交于 2020-04-28 05:07:09
一.celery简介 Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。 可以看到,Celery 主要包含以下几个模块: 任务模块 Task 包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。 消息中间件 Broker Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。 任务执行单元 Worker Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它。 任务结果存储 Backend Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用 RabbitMQ, redis 和 MongoDB 等。 所以总结一下celery:它是一个处理大量消息的分布式系统,能异步任务、定时任务

Celery与Django的结合

瘦欲@ 提交于 2020-04-28 04:16:47
一、什么是Celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以实现任务的异步处理以及定时任务的处理,它的基本工作流程是: 先启动任务执行单元Worker,让它一直监听消息中间件中是否有任务 客户端可以发布异步任务和定时任务 通过Celery将上述任务添加到消息中间件(可以使用rabbitMQ或者Redis) 此时Worker可以监听到中间件中有任务,进行执行任务 执行完毕后任务结果就放到Backend中(可以使用Redis或者Mysql) 这里主要讨论在Django中如何使用Celery来执行异步任务和定时任务。 二、Django中执行异步任务 1、环境配置 需要注意的是包之间的兼容性 pip install celery == 4.3 .0 pip install eventlet == 0.25.1 pip install redis == 3.2.0 2、创建Django项目 其目录结构如下: - proj/ - manage.py - proj/ - __init__ .py - settings.py - urls.py 3、定义Celery实例 创建celery.py文件,位于proj/proj/celery.py from __future__ import absolute_import, unicode_literals

celery在Django中的应用

笑着哭i 提交于 2020-04-28 02:59:38
这里不解释celery,如果不清楚可以参考下面链接: http://docs.celeryproject.org/en/latest/getting-started/introduction.html 这里来演示一下在Django项目中如何使用celery: 1. 首先我们需要使用到两个库,用pip安装:   pip install celery   pip install django -celery 2. 在celery建议使用rabbitmq作为消息代理,当然也支持redis作代理,abbitmq提供的队列和消息持久化机制确实更加稳定,所以对于追求稳定性的任务更适合适配rabbitmq作为中间件, 这里用rabbitmq作为消息代理,用redis作为存储后端   我的环境是deepin,安装rabbitmq和redis   sudo apt-get install rabbitmq- server   sudo apt -gei install redis 3. 在django中使用celery的方式和普通py文件中的方式略有不同,下面是一个向通过秒滴平台发送短信验证码的demo: 普通py文件用法: # tasks.py import os from celery import Celery app = Celery( ' tasks ' , backend= ' amqp

python中socket、socketio、flask-socketio、WebSocket的区别与联系

别说谁变了你拦得住时间么 提交于 2020-04-26 02:50:13
socket、socketio、flask-socketio、WebSocket的区别与联系 socket 是通信的基础,并不是一个协议,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族和UDP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 WebSocket 是html5新增加的一种通信协议,可以类比于http协议。常见的应用方式如弹幕、web在线游戏。 socketio 是基于socket连接后(并没有自己实现socket的链接而是复用了web框架或gevent、eventlet中的socket)对网络输入输出流的处理,封装了send、emit、namespace、asyncio 、订阅等接口,同时扩展使用了redis、rabbitmq消息队列的方式与其他进程通信。 flask-socketio 是socketio对flask的适配,封装了emit、send和关于room的操作。 select的链接、发送等底层操作还是在flask中做的,socketio对其做了抽象。使用threading模式时并没有自己实现socket的链接而是复用了web框架的socket

Eventlet or gevent or Stackless + Twisted, Pylons, Django and SQL Alchemy

[亡魂溺海] 提交于 2020-01-28 13:16:53
问题 We're using Twisted extensively for apps requiring a great deal of asynchronous io. There are some cases where stuff is cpu bound instead and for that we spawn a pool of processes to do the work and have a system for managing these across multiple servers as well - all done in Twisted. Works great. The problem is that it's hard to bring new team members up to speed. Writing asynchronous code in Twisted requires a near vertical learning curve. It's as if humans just don't think that way

Unterstanding eventlet.wsgi.server

送分小仙女□ 提交于 2020-01-02 09:56:51
问题 I have this simple Python programm: from eventlet import wsgi import eventlet from eventlet.green import time def hello_world(env, start_response): print "got request" time.sleep(10) start_response('200 OK', [('Content-Type', 'text/plain')]) return ['Hello, World!\n'] wsgi.server(eventlet.listen(('', 8090)), hello_world) So when i run it, and open http://localhost:8090/ on my browser multiple times, got request is only printed after the first request was already processed (after 10 seconds).