草庐IT

Eventlet

全部标签

python - eventlet 是否可以通过异步传入和传出的消息来管理 AMQP 连接?

实际设计:对于那些回到这个问题的人来说,下面的有用答案促使我走向一个运行良好的可行设计。三个见解是关键:Eventlet是一个非常安全的环境——如果两个greenlet都尝试recv()或两者都尝试send()同时从同一个套接字中,然后Eventlet优雅地杀死第二个greenlet,但有一个异常(exception)。这很棒,意味着如果amqplib将导致简单的异常,而不是无法重现的数据交错错误。“绿色”不好。amqplib方法大致分为两组:wait()recv()内的循环直到组装了AMQP消息,而其他方法send()回帖后不会自己尝试recv().鉴于amqplib,这是非常好的运

python - 使用 Eventlet 从 WSGI 应用程序获取客户端 IP 地址

我目前正在编写一个基于PythonEventlet库(http://eventlet.net/doc/)的基本调度模型服务器。查看了Eventlet上的WSGI文档(http://eventlet.net/doc/modules/wsgi.html),我可以看到eventlet.wsgi.server函数除了客户端之外还记录了x-forwarded-forheaderIP地址。但是,获得它的方法是附加一个类似文件的对象(默认为sys.stderr),然后让服务器通过管道将其连接到该对象。我希望能够从应用程序本身(即以start_response和environ作为参数的函数)中获取客户

python - Eventlet/通用异步 I/O 任务粒度

我正在开发一个Web后端/API提供程序,它从第3方WebAPI获取实时数据,将其放入MySQL数据库并通过HTTP/JSONAPI提供。我正在使用flask提供API,并使用SQLAlchemyCore处理数据库。对于实时数据抓取部分,我有通过发送请求、将返回的xml解析为Pythondict并返回它来包装第3方API的函数。我们将调用这些API包装器。然后我在其他获取相应数据的方法中调用这些函数,根据需要进行任何处理(如时区转换等)并将其放入数据库中。我们将调用这些处理器。我一直在专门阅读有关异步I/O和eventlet的内容,给我留下了深刻的印象。我将把它合并到我的数据抓取代码中

python - 在 python 中使用 Eventlet 模块比线程模块有什么好处?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。特别是Eventlet中的GreenPool类。我测试了一些代码,将大文件作为分段上传的各个部分上传到S3。到目前为止我注意到的是,当使用eventlet时,CPU使用率要低得多。只是寻找Eventlet的其他优点和缺点,而不是仅使用线程。谢谢。

python - 使用 Flask 和 eventlet 响应并发请求

我尝试设置一个使用eventlet的最小Flask应用程序立即响应并发请求,而不是一个接一个地阻塞和响应请求(就像标准Flask调试网络服务器所做的那样)。先决条件:pipinstallFlaskpipinstalleventlet根据我目前在Internet上找到的内容的理解,它应该像这样工作:#activateeventletimporteventleteventlet.monkey_patch()fromflaskimportFlaskimportdatetimefromtimeimportsleep#createanewFlaskapplicationapp=Flask(__n

python - Celery - 使用 apply_async 添加 7000 个任务需要 12 秒

我正在使用Celery将任务分发到多个服务器。出于某种原因,将7,000个任务添加到队列中非常慢,而且似乎是CPU受限的。执行下面的代码需要12秒,这只是将任务添加到队列中。start=time.time()forurlinurls:fetch_url.apply_async((url.strip(),),queue='fetch_url_queue')printtime.time()-start在broker之间切换(试过redis、RabbitMQ、pyamqp)并没有太大的影响。减少工作人员的数量(每个工作人员都在自己的服务器上运行,与添加任务的主服务器分开)没有任何显着影响。传

python - Celery - 使用 apply_async 添加 7000 个任务需要 12 秒

我正在使用Celery将任务分发到多个服务器。出于某种原因,将7,000个任务添加到队列中非常慢,而且似乎是CPU受限的。执行下面的代码需要12秒,这只是将任务添加到队列中。start=time.time()forurlinurls:fetch_url.apply_async((url.strip(),),queue='fetch_url_queue')printtime.time()-start在broker之间切换(试过redis、RabbitMQ、pyamqp)并没有太大的影响。减少工作人员的数量(每个工作人员都在自己的服务器上运行,与添加任务的主服务器分开)没有任何显着影响。传

python - Celery + Redis - .get() 在平稳运行约 70 小时后无限期挂起

好几天一切正常,但随后我在.get()上无限期挂起。发生无限期挂起所需的时间各不相同,但在运行24到72小时之间。我怀疑这与Redis代理有关。redis-cli中CLIENTLIST的输出显示大量连接具有非常高的空闲数(见下文)。但我不知道这是否是一个问题或为什么这会导致Celery的.get()无限期挂起。我已经确认这不是由长时间运行的任务引起的。我还在其中一个工作进程上运行了strace和lsof,但我无法从输出中收集到任何有用信息:straceoutput、lsofoutput。在收到.get通知后不久,我在主服务器(我有1个主服务器和6个工作服务器)的redis-cli中运行

python - Celery + Redis - .get() 在平稳运行约 70 小时后无限期挂起

好几天一切正常,但随后我在.get()上无限期挂起。发生无限期挂起所需的时间各不相同,但在运行24到72小时之间。我怀疑这与Redis代理有关。redis-cli中CLIENTLIST的输出显示大量连接具有非常高的空闲数(见下文)。但我不知道这是否是一个问题或为什么这会导致Celery的.get()无限期挂起。我已经确认这不是由长时间运行的任务引起的。我还在其中一个工作进程上运行了strace和lsof,但我无法从输出中收集到任何有用信息:straceoutput、lsofoutput。在收到.get通知后不久,我在主服务器(我有1个主服务器和6个工作服务器)的redis-cli中运行

python - Eventlet 或 gevent 或 Stackless + Twisted、Pylons、Django 和 SQL Alchemy

我们将Twisted广泛用于需要大量异步io的应用程序。在某些情况下,东西是受cpu限制的,为此我们产生了一个进程池来完成工作,并拥有一个跨多个服务器管理这些进程的系统——所有这些都在Twisted中完成。效果很好。问题是很难让新的团队成员跟上进度。在Twisted中编写异步代码需要接近垂直的学习曲线。就好像人类天生就不会那样想。我们可能正在考虑采用混合方法。也许将xmlrpc服务器部分和流程管理保留在Twisted中,并在代码中实现其他内容,至少在某种程度上看起来是同步的,而不是同步的。再说一次,我喜欢显式而不是隐式,所以我必须多考虑一下。无论如何到greenlets-这些东西的效果