问题标签 [eventlet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Celery + Eventlet + 非阻塞请求
我requests
在 celeryworkers
中使用 Python 进行大量(~10/秒)API 调用(包括 GET、POST、PUT、DELETE)。每个请求大约需要 5-10 秒才能完成。
我尝试在池中运行 celery workers,eventlet
并发 1000。
由于requests
正在阻塞进程,因此每个并发连接都在等待一个请求。
如何使requests
异步?
python - 为什么多进程无法通过 eventlet 加速发送 HTTP 请求
我有一个应用程序来发送一堆 HTTP 请求。首先,我使用eventlet和requests来实现它。但是性能太低了。因此,我希望使用多进程来加速它。需要知道的是,服务器处理单个请求大约需要 200 毫秒(不包括网络传输)。
但是,多进程比原始版本慢。我对这个结果感到非常惊讶!为什么?
如下所示的代码,我使用timeit来测量时间。
python - Python打开文件太多,eventlet和multiprocessing.dummy
我有一个在 Linux 上运行的 Python 2.7 脚本,它与IOError: [Errno 24] Too many open files
. 当我运行lsof -p <script_pid>
以查看脚本打开了哪些文件时,我看到越来越多的anon_inode
文件。
eventlet
此脚本首先使用并发从 S3 下载文件。multiprocessing.dummy
然后它使用多线程处理下载的文件。我已经单独运行了多线程代码,发现当我为 eventlet 包含以下猴子补丁时,它只会泄漏文件描述符:
任何关于我如何解决这个问题的想法都将不胜感激!
django - 在 Celery 中同时使用 gevent(或 eventlet)和 prefork worker
在 Celery 文档的并发部分中,它指出:
... Eventlet 和 prefork 工作人员的混合,并根据兼容性或最有效的方式路由任务
来源:http ://celery.readthedocs.org/en/latest/userguide/concurrency/eventlet.html#concurrency-eventlet
这意味着可以让一个工作人员使用 gevent/eventlet 池实现,而另一个使用 prefork 池。
可以在创建多个工作人员时指定池实现celery multi
:
这启动了 2 个 gevent 工作人员,但是我如何在使用时基于每个工作人员指定池实现celery multi
,以便一个工作人员使用 gevent 池而另一个使用 prefork?
celery multi
文档没有提到任何关于这个特定问题的内容,源代码 ( )celery.bin.multi
并没有真正表明这是可能的(除非我误读/误解了代码)。
django - Django 超过最大 Postgres 连接数
我遇到了一个 Django 应用程序的问题,该应用程序在Gunicorn
与异步eventlet
工作人员一起运行时超过了与 Postgres 的最大同时连接数 (100)。当达到连接限制时,应用程序开始返回500
-errors,直到可以建立新连接。
这是我的数据库配置:
这就是 Gunicorn 的启动方式:
这些是已安装的软件包:
- djano v1.7
- 独角兽 v19.3
- 小事件 v0.17
- psycopg2 v2.6
与 Gunicorn 工作人员一起运行时,Django 是否无法跨 HTTP 请求重用连接?某种第 3 方数据库连接池是我唯一的选择吗?
更新 15-03-23:异步 Gunicorn 工作人员似乎存在问题CONN_MAX_AGE
。如本文所述,连接确实是持久的,但从未在任何顺序请求中重用。设置CONN_MAX_AGE
为0
强制 Django 在请求结束时关闭连接,以防止出现未使用的持久连接。
python - Celery + Eventlet pool 并没有提高异步 web 请求的执行速度
正如celery 文档中所提到的,对于诸如异步 HTTP 请求之类的事件 I/O,eventlet 池应该比 prefork 池更快。
他们甚至提到
“在使用 feed hub 系统的非正式测试中,Eventlet 池每秒可以获取和处理数百个 feed,而 prefork 池花费 14 秒处理 100 个 feed。”
但是,我们无法产生任何与此类似的结果。完全按照描述运行示例任务、urlopen和crawl并打开数千个 url,似乎 prefork 池几乎总是表现得更好。
我们测试了各种并发(并发 200 的 prefork,并发 200、2000、5000 的 eventlet)。在所有这些情况下,使用 prefork 池在更短的时间内完成任务。正在运行的机器是运行 RabbitMQ 服务器的 2014 Macbook Pro。
我们希望一次发出数千个异步 HTTP 请求,并且想知道 eventlet 池是否值得实现?如果是,我们缺少什么?
python -V && pip freeze 的结果是:
使用的测试代码(几乎完全来自文档):
celery - 在 Solaris 上使用 eventlet 时出现 Celery worker 错误
我正在使用 eventlet 类和并发设置为 8 运行标准 celery worker。当这种情况发生时,这些是非常忙碌的工作人员(但在不忙时可能会发生,很难说)。
我知道我的任务没有任何泄漏,并且以每个子项设置的最大任务运行它以防万一。
不过,我遇到了这些错误,我不知道为什么。据我所知,这是随机的。我的环境中有什么东西吗?已知的问题?除非我有误解,否则这似乎不是由于任务本身的错误。我错了吗?任何想法都会很棒!
此外,作为 prefork 运行时,我没有收到任何这些错误。
错误一:
错误2:
错误 3:
python - 无法使用 python eventlet 库(eventlet.timeout.Timeout)超时
我正在遍历一个列表并对列表的每个成员执行一些操作。如果一个成员花费了太多时间(在这种情况下为 1 秒),我打算通过它。然而,try
语句中的块总是被处理并且永远不会超时。我不明白为什么。
timeout - 为什么在 eventlet spawn 函数中 urlopen 超时
我遇到了一个奇怪的问题:
eventlet.green.urllib2.urlopen() raise HTTP Error 408: Request Timeout。
但如果打开“# eventlet.green.time.sleep(0.1)”成功
,有人知道为什么吗?多谢!
测试.py:
结果:
python - Eventlet 超时未退出
为什么 eventlet 允许它完成 6 秒,而它应该在 5 秒后退出缩进?