问题标签 [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 - Eventlet+Gunicorn 工作线程中有什么?
如果我使用带有 Eventlet 工作器类型的 Gunicorn 部署 Django,并且只使用一个进程,那么在为 1000 个(默认情况下)工作器连接提供服务时会发生什么?Django 的哪些部分被复制到每个线程中?有没有抄袭的部分?
django - django + celery + redis + postgres 挂了
我正在将我的项目部署到 ms azure linux vm 中。
每个服务都部署在不同的服务器上。实际上对于服务器。
但是,它不起作用。
celeryd 总是挂在超过 20~30 个 http 请求中。
然后在 ctrl+c 并重新启动 celeryd 之后就可以工作了。但是..它也很快挂起。
Eventlet 和 gevent 也在使用.. 但是.. eventlet 不能正常工作.. gevent 更好..
我认为 postgres 或模型的使用是问题之一。但是..我不知道为什么..
有人帮帮我吗?!!!
下面的django模型是否正确使用?
sync_service_log = SyncServiceLog.objects.get(pk = sync_log["service"])
sync_service_log.save()
。
.
{{一些代码}}
。
.
sync_service_log.save()
python - 限制 websocket 连接的首选方法是什么?
我有一个网络应用程序,我在其中将模型更改流式传输到 chrome 客户端中的主干集合。有一些主干视图可能会或可能不会呈现页面的某些部分,具体取决于更新的类型和正在查看的内容。例如,对模型的某些更改会导致重新渲染集合的视图,并且可能会或可能不会为正在更新的模型打开详细信息面板视图。这些模型更改可能发生得非常快,因为服务器端工作流程涉及对模型的非常冗长和快速的更改。
这是问题所在:当向客户端发送消息时,我在网络服务器的进程中收到大量 errno 32 管道损坏消息,尽管 websocket 连接仍然处于打开状态并且它readyState
仍然是 1(打开)。
我怀疑正在发生的事情是,onmessage
当下一条消息进来时,各种视图还没有在回调中完成渲染。在我在标准输出中获得这些回溯后,websocket 连接仍然可以工作,并且 UI 仍然会更新。
如果我放入eventlet.sleep(0.02)
从消息队列中读取模型更改并将它们发送到 websocket 的循环中,那么损坏的管道消息就会消失,但这不是一个真正的解决方案,感觉就像一个讨厌的 hack。
有没有人对 websocket 的功能有类似的问题,onmessage
试图做太多的工作并且在下一条消息进来时仍然很忙?有人有解决方案吗?
performance - 是什么让 eventlet 和 gevent 之间的性能有显着差异?
因此,这两个库具有相似的理念和相似的设计决策。但是这个流行的 WSGI 基准测试说eventlet
比gevent
. 是什么让他们的表现如此不同?
据我所知,它们之间的主要区别是:
gevent
有意依赖并耦合到libev
(libevent
, 之前的),同时eventlet
定义了独立的反应器接口并使用 , 和 Twisted reactor 实现特定select
的epoll
适配器。额外的反应器接口是否会影响关键性能?gevent
主要用 Cython 编写,而eventlet
用纯 Python 编写。对于计算量不大但受 IO 限制的程序,本机编译的 Cython 是否比纯 Python 更快?gevent
模拟标准库接口的原语,而的eventlet
原语与标准不同,并提供额外的层来模拟它。额外的仿真层会eventlet
变慢吗?只是执行
eventlet.wsgi
比差gevent.pywsgi
吗?
我真的很想知道,因为它们对我来说总体上看起来很相似。
python - Python中的多线程编程有什么优势?
当我听说多线程编程时,我想到了加速我的程序的机会,但不是吗?
和结果:
我的问题是,如果我不是在我的笔记本电脑上而是在服务器上运行这段代码并设置更多的工人价值,它会比 CPython 的版本运行得更快吗?线程的优点是什么?
添加: 所以我使用原始 cpython 的线程重写应用程序
结果是
我认为这是一个非常好的结果。我以标准的 nmap 扫描时间为标准:
我现在的问题是:据我所知,Eventlet 中的线程是如何实现的,这不是线程,而是 Eventlet 的特别之处,为什么它们不能加速任务?
Eventlet 被 OpenStack 等许多主要项目使用。但为什么呢?只是以异步方式或其他方式对数据库进行繁重的查询?
asynchronous - 在 SQLAlchemy 中正确使用与异步服务器的会话
背景:
我们有一个使用 SqlAlchemy 作为 ORM 的 Python Web 应用程序。我们目前使用 Gunicorn(sync worker) 运行这个应用程序。此应用程序仅用于响应长时间运行的请求(即服务大文件,请不要建议使用 X-Sendfile/X-Accel-Redirect,因为响应是从 Python 应用程序动态生成的)。
使用 Gunicorn 同步 worker,当我们运行 8 个 worker 时,只有 8 个请求同时被服务。由于所有这些响应都是 IO 绑定的,我们希望切换到异步工作器类型以获得更好的吞吐量。
我们在 Gunicorn 配置文件中将 worker 类型从 sync 切换为 eventlet。现在我们可以同时响应所有请求,但是又出现了另一个神秘(对我来说很神秘)的问题。
在应用程序中,我们在模块级别有一个作用域会话对象。以下代码来自我们的 orm.py 文件:
我们的应用程序使用这样的会话:
当我们使用同步工作者时,会话一次从 1 个请求中使用。在我们切换到异步 eventlet worker 之后,同一个 worker 中的所有请求都共享同一个 session,这是不需要的。当会话在一个请求中提交或发生异常时,所有其他请求都会失败,因为会话是共享的。
在 SQLAlchemy 的文档中,说 scoped_session 用于线程环境中的单独会话。异步工作者中的 AFAIK 请求在同一线程中运行。
问题:
我们希望异步工作者中的每个请求都有单独的会话。在 SQLAlchemy 中使用异步工作者会话的正确方法是什么?
python - gevent pool.wait_available() 方法含义
看,人们。我们有一个关于 gevent.pool 类和 pool.wait_available() 方法的问题,两个代码片段
1.
2.
给我们类似的结果:
谁能解释 wait_available() 方法的含义?以及可能的使用情况。
=======update======== 我已经对它进行了修改,它可以正常工作,我只想知道这两个代码片段之间的区别。
python - 使用 eventlet.GreenPool.spawn 时如何在主线程中引发异常
我使用 eventlet.GreenPool.spawn 运行一些任务,然后等待所有线程完成。我知道会引发异常 - 我如何捕获该异常并将其抛出到主线程中?我很确定这很容易,但是我完全错过了一些东西。
这是一个例子(失败了,我希望它成功)
它的输出:
python - `eventlet.spawn` 没有按预期工作
我正在为数据分析任务编写一个 Web UI。
这是它应该工作的方式:
在用户指定和 等参数后dataset
,learning rate
我创建一个新的task record
,然后异步启动此任务的执行程序(执行程序可能需要很长时间才能运行。),并将用户重定向到其他页面。
搜索后async library for python
,我从 开始eventlet
,这是我在flask
视图函数中写的:
使用上面的代码,执行程序根本没有执行。
我的代码可能有什么问题?或者也许我应该尝试别的?
python - 数据库驱动程序的 Gevent/Eventlet 猴子补丁
在进行 Gevent/Eventlet 猴子补丁之后 - 我可以假设每当 DB 驱动程序(例如redis-py、pymongo)通过标准库(例如socket
)使用 IO 时,它都是异步的吗?
因此,使用 eventlets 猴子补丁就足以使例如:redis-py在 eventlet 应用程序中非阻塞?
据我所知,如果我关心连接使用(例如,为每个greenlet 使用不同的连接)就足够了。但我想确定。
如果您知道还需要什么,或者如何在 Gevent/Eventlet 中正确使用 DB 驱动程序,请同时输入。