我想eventlet
在我的系统上安装以便为软件部署安装"Herd"..但终端显示gcc错误:
root@agrover-OptiPlex-780:~# easy_install -U eventlet
Searching for eventlet
Reading http://pypi.python.org/simple/eventlet/
Reading http://wiki.secondlife.com/wiki/Eventlet
Reading http://eventlet.net
Best match: eventlet 0.9.16
Processing eventlet-0.9.16-py2.7.egg
eventlet 0.9.16 is already the active version in easy-install.pth
Using /usr/local/lib/python2.7/dist-packages/eventlet-0.9.16-py2.7.egg
Processing dependencies for eventlet
Searching for greenlet>=0.3
Reading http://pypi.python.org/simple/greenlet/
Reading https://github.com/python-greenlet/greenlet
Reading http://bitbucket.org/ambroff/greenlet
Best match: greenlet 0.3.4
Downloading http://pypi.python.org/packages/source/g/greenlet/greenlet- 0.3.4.zip#md5=530a69acebbb0d66eb5abd83523d8272
Processing greenlet-0.3.4.zip
Writing /tmp/easy_install-_aeHYm/greenlet-0.3.4/setup.cfg
Running greenlet-0.3.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-_aeHYm/greenlet-0.3.4/egg-dist-tmp-t9_gbW
In file included from greenlet.c:5:0:
greenlet.h:8:20: fatal error: Python.h: No such file or directory
compilation terminated.
error: …
Run Code Online (Sandbox Code Playgroud) 我们广泛使用Twisted来处理需要大量异步io的应用程序.在某些情况下,东西是cpu绑定的,为此我们产生了一个进程池来完成工作,并有一个系统来管理多个服务器上的这些 - 所有这些都是在Twisted中完成的.效果很好.问题是很难让新团队成员加快速度.在Twisted中编写异步代码需要近乎垂直的学习曲线.就像人类自然不这么认为那样.
我们也许正在考虑采用混合方法.也许保持xmlrpc服务器部分和进程管理在Twisted中并在代码中实现其他东西,至少在某种程度上看起来是同步的,而不是这样.然后我又喜欢明确的隐含,所以我不得不考虑更多.无论如何,在greenlets上 - 这些东西有多好用?所以有Stackless,你可以从我的Gallentean头像中看到,我很清楚它在第一手使用CCP的旗舰EVE Online游戏方面取得了巨大的成功.那么Eventlet或gevent呢?好吧现在只有Eventlet与Twisted一起使用.然而gevent声称速度更快,因为它不是纯粹的python实现,而是依赖于libevent.它还声称具有较少的特性和缺陷.GEVENT据我所知,它由1个人维护.这让我有点怀疑,但是所有伟大的项目都是这样开始的...然后就是PyPy - 我还没有读完那篇文章 - 只是在这个帖子中看到它:Stackless的缺点.
令人困惑 - 我想知道该怎么做 - 听起来像Eventlet可能是最好的选择,但它真的足够稳定吗?那里的任何人有经验吗?我们应该选择Stackless,因为它已经存在并且是经过验证的技术 - 就像Twisted一样 - 并且它们可以很好地协同工作.但我仍然不愿意使用单独的Python版本来完成这项工作.该怎么办....
这个有点令人讨厌的博客文章对我来说很重要:对于Grownups的异步IO 我没有得到Twisted就像Java一样对我而言Java通常是你处于线程思维中的地方,但无论如何.然而,如果那个猴子补丁的东西真的像那样工作那么哇.哇哇!
我已经尝试过使用Python + boto +多处理,S3cmd和J3tset,但是他们都在苦苦挣扎.
任何建议,也许是你一直在使用的现成脚本或我不知道的另一种方式?
编辑:
eventlet + boto是一个有价值的解决方案,如下所述.在http://web.archive.org/web/20110520140439/http://teddziuba.com/2010/02/eventlet-asynchronous-io-for-g.html找到了一篇很好的活动参考文章
我已经在下面添加了我正在使用的python脚本.
我有一个过程,需要"稍后"执行一系列操作(通常在10-60秒后).问题是那些"后来的"动作可能很多(1000s),所以使用Thread
每个任务是不可行的.我知道gevent和eventlet等工具的存在,但问题之一是该过程使用zeromq进行通信,所以我需要一些集成(eventlet已经有了它).
我想知道的是我的选择是什么?因此,建议是受欢迎的,在库中(如果你已经使用了任何提到的请分享你的经验),技术(Python的"协同程序"支持,使用一个睡眠一段时间并检查队列的线程),如何利用zeromq的民意调查或事件循环来完成这项工作或其他事情.
这两个库共享相似的哲学和类似的设计决策.但是这个流行的WSGI基准测试表明eventlet
速度比慢gevent
.是什么让他们的表现如此不同?
据我所知,它们之间的主要区别是:
gevent
故意取决于和被耦合到libev
(libevent
先前)而eventlet
定义独立反应器接口并实现使用特定的适配器select
,epoll
和它后面扭曲反应器中.额外的反应器接口是否会产生关键性能?
gevent
主要用Cython编写,而eventlet
用纯Python编写.本机编译Cython比纯Python更快,对于计算量不大但是IO绑定的程序?
的原语gevent
仿效标准库接口而eventlet
的基元从标准不同,并提供额外的层来模拟它.额外的仿真层是否会eventlet
变慢?
执行eventlet.wsgi
情况比刚好差gevent.pywsgi
吗?
我真的很好奇,因为它们对我来说总体看起来很相似.
我有一个在 docker 中使用 gunicorn(eventlet worker)运行烧瓶的工作代码。它也在生产中工作,但在我的机器上,它开始这样做。我在谷歌上找不到关于这件事的任何信息。可能是什么问题?
Error: class uri 'eventlet' invalid or not found:
web_1 |
web_1 | [Traceback (most recent call last):
web_1 | File "/root/.local/lib/python3.7/site-packages/gunicorn/util.py", line 99, in load_class
web_1 | mod = importlib.import_module('.'.join(components))
web_1 | File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
web_1 | return _bootstrap._gcd_import(name[level:], package, level)
web_1 | File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
web_1 | File "<frozen importlib._bootstrap>", line 983, in _find_and_load
web_1 | File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
web_1 | File "<frozen …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个具有事件循环的GUI框架.一些线程来处理UI,一些线程用于事件处理.我搜索了一下,找到了这三个库,我想知道哪一个更好用?优缺点都有什么?
我可以使用这三个库中的一个,甚至可以使用python 线程或并发库为自己创建一些东西.
我希望分享任何经验,基准和比较.
我们有一个 Flask 应用程序,它使用 eventlet 工作线程通过 gunicorn 提供服务。我们正在 kubernetes pod 中部署应用程序,其想法是根据工作负载扩展 pod 的数量。
gunicorn 中工人数量的推荐设置是2 - 4 x $NUM_CPUS
. 请参阅文档。我以前在专用的物理硬件上部署了服务,这样的计算是有意义的。在 4 核机器上,有 16 名工人听起来不错,我们最终将其增加到 32 名工人。
这个计算是否仍然适用于使用异步工作者的 kubernetes pod,特别是:
我应该如何设置 gunicorn 工人的数量?
-w 1
并让 kubernetes 通过 pod 处理缩放?2-4 x $NUM_CPU
在 kubernetes 节点上将其设置为。在一个吊舱还是多个吊舱?我们决定采用第一个选项,这是我们目前的方法。将 gunicorn 作品的数量设置为 1,并通过增加 Pod 的数量进行水平缩放。否则将会有太多活动部件,而且我们将无法充分利用 Kubernetes 的潜力。
我知道有人会面临这个问题。我今天遇到了这个问题,但我可以及时解决它,我想分享我的解决方案:
问题:
from flask_socketio import SocketIO
Run Code Online (Sandbox Code Playgroud)
您将收到类似以下内容的输出错误:
属性错误:模块“dns.rdtypes”没有属性 ANY
仅当您安装了 eventlet 时才会发生这种情况,因为它会随之安装 dnspython。
解决办法很简单,重新安装之前发布的dnspython即可:
python3 -m pip install dnspython==2.2.1
问题应该消失
我尝试设置一个最小的Flask应用程序,该应用程序使用eventlet立即响应并发请求,而不是阻塞并响应一个请求(如标准的Flask调试Web服务器那样).
先决条件:
pip install Flask
pip install eventlet
Run Code Online (Sandbox Code Playgroud)
从我到目前为止在互联网上发现的东西的理解,它应该像这样工作:
# activate eventlet
import eventlet
eventlet.monkey_patch()
from flask import Flask
import datetime
from time import sleep
# create a new Flask application
app = Flask(__name__)
# a short running task that returns immediately
@app.route('/shortTask')
def short_running_task():
start = datetime.datetime.now()
return 'Started at {0}, returned at {1}'.format(start, datetime.datetime.now())
# a long running tasks that returns after 30s
@app.route('/longTask')
def long_running_task():
start = datetime.datetime.now()
sleep(30)
return 'Started at {0}, returned at …
Run Code Online (Sandbox Code Playgroud) eventlet ×10
python ×8
gevent ×4
flask ×3
gunicorn ×2
amazon-s3 ×1
asyncsocket ×1
boto ×1
concurrency ×1
dnspython ×1
docker ×1
greenlets ×1
kubernetes ×1
linux ×1
performance ×1
pypy ×1
scaling ×1
ubuntu ×1
wsgi ×1