问题标签 [gevent]
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 - 带有gevent的mongoengine,如何关闭/结束连接?
我正在connection refused because too many open connections: 204
尝试MyApp.objects.get(foo=bar)
在 gevent 过程中进行操作。在 models.py 我有connect('my_db')
. 在我的脚本中,gevent.monkey.patch_all()
我看到了这个问题
pymongo + gevent:给我一个香蕉,然后给我monkey_patch?
和这个问题
https://github.com/hmarr/mongoengine/issues/272
但我不明白如何访问调用的连接end_request
。我也试过这个补丁,但它对我没有帮助(除非我用错了)
python - 从存根脚本导入主脚本导致冻结
我正在构建一个与 py2app 一起分发的应用程序。因为我不希望从 .app 文件中提取源代码,所以我有一个名为 run.py 的存根文件,然后运行 mainapp.py 中的代码:
直接在终端中运行(不涉及 py2app)会冻结与 gevent 相关的代码部分。变成.app时的结果是一样的。以上述方式导入是否会改变解释器的任何环境?似乎很奇怪,只是冻结,没有错误消息(没有 try/catch 块。)
python - 使用 gevent 运行 Web 应用程序
我想尝试使用 gevent 作为 Web 服务器和应用程序框架。我看不到任何方法可以“重新启动”服务器或更新应用程序代码,而无需再次杀死并启动整个 python 应用程序。
这就是它的完成方式吗?也许这只是我理解与 apache 方式不同的范式的问题。
此外,作为一个半相关的问题,通过 gevent 运行 Web 服务器和站点/服务本身是否是一个好主意。我已经看到使用 gunicorn 作为服务器和 gevent 作为应用程序的其他实现,但是从我看到的基准测试来看,gevent 作为服务器在扩展方面远远优于 gunicorn。
javascript - 浏览器多人网络策略——这看起来是一个可行的解决方案吗?
我有兴趣将某种多人角色扮演游戏制作为纯粹的基于浏览器的游戏,几乎不需要插件要求。经过大量研究,我得出了以下计划。我知道我在这里引用的一些技术并没有被所有浏览器(特别是 IE)采用,但我暂时愿意接受。
另外——我知道 MMO 在任何情况下都是一个崇高的目标,但是过去在类似的方向上做过很多较小的项目,我觉得我最终想给它一个很好的尝试。
所以这是一个粗略的大纲,我很想听听任何人都可以在这种安排中看到的明显问题:
客户: WebGL / Javascript(可能是three.js)。使用浏览器本地存储来保存游戏资产,接受删除浏览器缓存将删除这些资产。
消息:使用google 协议缓冲区对 客户端/服务器之间的消息进行编码,以方便和减小大小。消息传递将通过 WebSocket。
GAME SERVER:在 python 中 运行在gevent 之上(看起来是处理许多并发的好解决方案)。将使用分片模式构建,基于此处的设计:
DB SERVER: MySQL 用于数据库,PHP 作用于游戏服务器和数据库之间。
细节: 我打算让游戏服务器每秒大约更新单个客户端 15-20 次,并使用客户端预测来填补空白。客户端可以以 30 fps 的速度向服务器发送键输入/消息。我更喜欢尽可能接近实时的体验,而不是回合制。我主要关心的是基于 TCP 的 WebSocket 协议,这会让整个事情变得不可能吗?
这个解决方案对 SO 来说是否现实?
非常感谢,
python - py2app 的应用程序在别名模式下正常运行,但在捆绑时不能正常运行
我有一个 pyobjc 应用程序在使用 gevent 库的仅 32 位 python 版本中运行。在 py2app 的别名模式下一切正常,但是一旦我构建了一个应用程序包,gevent 模块就找不到 httplib 库,即使它与 site-packages 目录捆绑在一起。
我已经按照建议尝试了错误导入(即使模块似乎已被打包),但无济于事。它可以找到 gevent.httplib 模块,但找不到它应该修补的模块。这可能是猴子修补功能的问题吗?
编辑:看起来 find_module 无法与我的 py2app 包一起正常工作。有解决方法吗?我不认为点模块有问题,因为 httplib 没有点(它是核心 python 库的一部分)
编辑 2:所以它肯定是 imp.find_module。使用import ('httplib') 而不是 load_module 可以修复它,但我不得不删除 sys.modules 中对 'httplib' 的引用,因为如果它已经加载,它就无法修补。我认为这不是正确的方法,尽管构建的应用程序包可以正常工作(httplib 现在是猴子补丁并允许使用 HTTPSConnection 进行初始化)。这个py2app问题有什么解决方法/修复吗?
python - Gevent通过非阻塞joinall()进行增量处理
在这里,我想为我的设置做一些修改。
我希望在向我的服务器发出的单个请求中获得多个 API 调用的响应。从所有这些 API 调用中,我想组合结果并将它们作为响应返回。到这里为止,几乎所有内容都遵循 gevent 文档的示例和这里的示例。现在这里的问题是我想以增量方式传递响应,所以如果第一个 API 调用返回了结果,我将在一个等待已久的请求中将此结果返回到前端,然后等待其他 API 调用并将它们在同一个请求中传递给前端。
我试图通过代码来做到这一点,但我不知道如何进行此设置。gevent.joinall()
并.join()
阻塞,直到所有 greenlet 都完成响应。
在此设置中我可以通过什么方式继续使用 gevent ?
我在这里使用的代码在链接https://bitbucket.org/denis/gevent/src/tip/examples/concurrent_download.py上给出。在这里.joinall()
,最后一条语句中的等待直到所有 url 都有完整的响应,我希望它是非阻塞的,以便我可以在回调函数 print_head() 中处理响应并逐步返回它们。
memcached - Gevent 准备好内存缓存客户端了吗?
我看到有一个用于 gevent 的 memcache 客户端端口(https://github.com/hjlarsson/gevent-memcache),但它自 2010 年 8 月以来一直没有更新。你们对使用 memcache 客户端有什么建议吗?事件?
python - 并行运行一系列函数来响应 HTTP 请求
我已经尝试了各种方法来解决这个问题,并想看看你们认为用 Python 解决这个问题的最佳方法是什么。
基本上,我有一个 Web 服务,它接受提供单个查询术语的请求,并继续使用该术语并行执行一系列计算。这些计算可以被认为是单独的函数调用。
这个想法是,一旦请求进来,我就异步调用函数,并保持请求直到结果开始流入。
根据我的研究,似乎使用像gevent这样的库可能是最好的方法,尽管我仍然不完全熟悉 greenlets。此外,似乎为了完成我正在寻找的功能类型(当结果可用时通过长请求将结果发送回客户端),我需要使用支持此功能的特殊类型的 StreamServer。响应本身只是 JSON 对象,前端的 JavaScript 模块将读取这些对象,当这些被发送回浏览器时,它反过来会更新 UI 组件。
这样做的最佳方法是什么?使用 gevent 之类的东西是否有意义,或者是否应该在没有库帮助的情况下使用协同程序来实现?我敢肯定,这里的很多人过去都做过很多事情,我想收集一些建议。
提前非常感谢,如果您想了解更多详细信息,请告诉我,我期待听到您的建议!
python - Gevent 猴子补丁破坏多处理
我正在尝试使用多处理的池来运行一组进程,每个进程都将运行一个 gevent 的 greenlets 池。这样做的原因是有很多网络活动,但也有很多 CPU 活动,所以为了最大化我的带宽和我所有的 CPU 内核,我需要多个进程和 gevent 的异步猴子补丁。我正在使用多处理的管理器创建一个队列,进程将访问该队列以获取要处理的数据。
这是代码的简化片段:
这是它产生的异常:
我相信这一定是由于普通 socket 模块和 gevent 的 socket 模块的行为之间存在一些差异。
如果我在子进程中进行monkeypatch,则队列创建成功,但是当子进程尝试从队列中获取()时,会发生非常相似的异常。由于在子进程中执行大量网络请求,因此确实需要对套接字进行修补。
我的 gevent 版本,我认为是最新的:
有任何想法吗?