我在python中构建了我的应用程序(使用来自eventlent的greenthreads)我应该使用Orbited作为彗星服务器将请求从用户端javascript代码传递给我的应用程序.
可悲的是,我发现Orbited死了,网站停机了几个星期,它缺乏python 2.7支持.
你能推荐一些好的替代品吗?
我试图让浮士德代理在烧瓶视图/端点内投射消息,我找不到任何例子,我真的很挣扎。
有没有人成功尝试过这个?文档说使用 gevent 或 eventlet 作为 asyncio 的桥梁,但不幸的是无法理解
如何在python中真正实现超时?http://eventlet.net/doc/modules/timeout.html
代码如下:
#!/usr/bin/python
import eventlet
import time
import sys
import random
while True:
try:
with eventlet.timeout.Timeout(1, False):
print 'limited by timeout execution'
while True:
print '\r' + str(random.random()),
sys.stdout.flush()
eventlet.sleep(0)
print ' Never printed Secret! '
except Exception as e:
print ' Exception: ', e
finally:
print ''
print ' Timeout reached '
print ''
Run Code Online (Sandbox Code Playgroud)
永远不会超时.我哪里错了?
我替换了Ps:
time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)
有:
eventlet.sleep(0)
Run Code Online (Sandbox Code Playgroud)
为异常添加False,现在效果很好:
with eventlet.timeout.Timeout(1):
Run Code Online (Sandbox Code Playgroud)
改成:
with eventlet.timeout.Timeout(1, False):
Run Code Online (Sandbox Code Playgroud)
但它只适用于eventlet.sleep(0.1)
例如,此代码错误:
#!/usr/bin/python
import eventlet
import time
start_time = time.time()
data = …
Run Code Online (Sandbox Code Playgroud) 正如celery 文档 中提到的,对于事件 I/O(例如异步 HTTP 请求),eventlet 池应该比 prefork 池更快。
他们甚至提到
“在使用 feed hub 系统进行的非正式测试中,Eventlet 池每秒可以获取并处理数百个 feed,而 prefork 池则花费 14 秒处理 100 个 feed。”
然而,我们无法产生任何与此类似的结果。完全按照描述运行示例任务、urlopen和crawl并打开数千个url,看来 prefork 池几乎总是表现得更好。
我们测试了各种并发性(并发性为 200 的 prefork,并发性为 200、2000、5000 的 eventlet)。在所有这些情况下,使用 prefork 池,任务都可以在更少的秒内完成。运行的计算机是 2014 年 Macbook Pro,运行 RabbitMQ 服务器。
我们希望同时发出数千个异步 HTTP 请求,并且想知道 eventlet 池是否值得实现?如果是的话,我们还缺少什么?
python -V && pip freeze 的结果是:
Python 2.7.6
amqp==1.4.6
anyjson==0.3.3
billiard==3.3.0.20
bitarray==0.8.1
celery==3.1.18
dnspython==1.12.0
eventlet==0.17.3
greenlet==0.4.5
kombu==3.0.26
pybloom==1.1
pytz==2015.2
requests==2.6.2
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)
使用的测试代码(几乎完全来自文档):
>>> from tasks import …
Run Code Online (Sandbox Code Playgroud) 在我的项目中,我创建了一个app
:
代码website_chat/views.py
:
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
Run Code Online (Sandbox Code Playgroud)
这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 handle(self, *args, **options):
if sio.async_mode == 'threading':
super(Command, self).handle(*args, **options)
elif sio.async_mode == 'eventlet':
# deploy with eventlet
import eventlet
import eventlet.wsgi
from Qyun.wsgi import application
eventlet.wsgi.server(eventlet.listen(('', 8002)), application)
elif sio.async_mode == …
Run Code Online (Sandbox Code Playgroud) 首先,将绿色线程(如eventlet或gevent)与标准库中的python本机线程(即同一个python进程中的Lib/threading.py)混合是否安全?
其次,如果它是安全的,这是一个坏主意吗?
我使用:在python中安装了eventlet库pip install eventlet
.但是当我尝试导入eventlet时发生了这个错误:
$python
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import eventlet
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named eventlet
Run Code Online (Sandbox Code Playgroud)
我试图再次安装它,但我得到了这个:
$pip install eventlet
Requirement already satisfied (use --upgrade to upgrade): eventlet in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/eventlet-0.18.1-py3.5.egg
Requirement already satisfied (use --upgrade to upgrade): greenlet>=0.3 in /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/greenlet-0.4.9-py3.5-macosx-10.6-intel.egg (from eventlet)
Run Code Online (Sandbox Code Playgroud)
如何纠正这个错误?
PS:我使用的是Python 2.7
您好,我正在尝试在 docker 容器中设置flask-socketio。它似乎可以运行,但是当我尝试访问端口 5000 上的 localhost 时出现错误(来自浏览器),就像我习惯使用 Flask 应用程序一样。它说:无法连接!
我将向您展示 5 个重要文件:Dockerfile、requirements.txt、docker-compose.yml、web_app.py 和 index.html
Dockerfile:
FROM python:3.6.5
WORKDIR /code
COPY * /code/
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
要求.txt:
Flask==1.0.2
Flask-SocketIO==3.0.1
eventlet==0.24.1
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml:
version: "3"
services:
web:
build: ./web
ports:
- '5000:5000'
volumes:
- './web:/code'
Run Code Online (Sandbox Code Playgroud)
我使用命令 docker-compose up --build
和docker-compose run web /bin/bash
以交互模式进入这个容器。
web_app.py:
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('my …
Run Code Online (Sandbox Code Playgroud) 我应该如何使用 SSL 将 app.run() 转换为 sockio.run() ?
我有下面的应用程序启动代码与 Flask 开发服务器一起运行
if __name__=='__main__':
app.run(ssl_context=(ssl_cert, ssl_key))
Run Code Online (Sandbox Code Playgroud)
我现在尝试使用 socketio 启动它,如下所示
if __name__=='__main__':
socketio.run(app, host='0.0.0.0', port=80, debug=True)
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何将证书传递到此调用中。
我需要做什么才能使这项工作成功?
eventlet ×10
python ×8
flask ×3
gevent ×2
celery ×1
comet ×1
concurrency ×1
django ×1
docker ×1
faust ×1
importerror ×1
python-2.7 ×1
python-3.6 ×1
socket.io ×1
sqlalchemy ×1
twisted ×1
wsgi ×1