问题标签 [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.

0 投票
2 回答
1413 浏览

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。我也试过这个补丁,但它对我没有帮助(除非我用错了)

https://gist.github.com/1184264

0 投票
1 回答
81 浏览

python - 从存根脚本导入主脚本导致冻结

我正在构建一个与 py2app 一起分发的应用程序。因为我不希望从 .app 文件中提取源代码,所以我有一个名为 run.py 的存根文件,然后运行 ​​mainapp.py 中的代码:

直接在终端中运行(不涉及 py2app)会冻结与 gevent 相关的代码部分。变成.app时的结果是一样的。以上述方式导入是否会改变解释器的任何环境?似乎很奇怪,只是冻结,没有错误消息(没有 try/catch 块。)

0 投票
1 回答
6789 浏览

python - 使用 gevent 运行 Web 应用程序

我想尝试使用 gevent 作为 Web 服务器和应用程序框架。我看不到任何方法可以“重新启动”服务器或更新应用程序代码,而无需再次杀死并启动整个 python 应用程序。

这就是它的完成方式吗?也许这只是我理解与 apache 方式不同的范式的问题。

此外,作为一个半相关的问题,通过 gevent 运行 Web 服务器和站点/服务本身是否是一个好主意。我已经看到使用 gunicorn 作为服务器和 gevent 作为应用程序的其他实现,但是从我看到的基准测试来看,gevent 作为服务器在扩展方面远远优于 gunicorn。

0 投票
1 回答
387 浏览

javascript - 浏览器多人网络策略——这看起来是一个可行的解决方案吗?

我有兴趣将某种多人角色扮演游戏制作为纯粹的基于浏览器的游戏,几乎不需要插件要求。经过大量研究,我得出了以下计划。我知道我在这里引用的一些技术并没有被所有浏览器(特别是 IE)采用,但我暂时愿意接受。

另外——我知道 MMO 在任何情况下都是一个崇高的目标,但是过去在类似的方向上做过很多较小的项目,我觉得我最终想给它一个很好的尝试。

所以这是一个粗略的大纲,我很想听听任何人都可以在这种安排中看到的明显问题:

客户: WebGL / Javascript(可能是three.js)。使用浏览器本地存储来保存游戏资产,接受删除浏览器缓存将删除这些资产。

消息:使用google 协议缓冲区对 客户端/服务器之间的消息进行编码,以方便和减小大小。消息传递将通过 WebSocket。

GAME SERVER:在 python 中 运行在gevent 之上(看起来是处理许多并发的好解决方案)。将使用分片模式构建,基于此处的设计:

DB SERVER: MySQL 用于数据库,PHP 作用于游戏服务器和数据库之间。

细节: 我打算让游戏服务器每秒大约更新单个客户端 15-20 次,并使用客户端预测来填补空白。客户端可以以 30 fps 的速度向服务器发送键输入/消息。我更喜欢尽可能接近实时的体验,而不是回合制。我主要关心的是基于 TCP 的 WebSocket 协议,这会让整个事情变得不可能吗?

这个解决方案对 SO 来说是否现实?

非常感谢,

0 投票
1 回答
815 浏览

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问题有什么解决方法/修复吗?

0 投票
1 回答
1220 浏览

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() 中处理响应并逐步返回它们。

0 投票
2 回答
1180 浏览

memcached - Gevent 准备好内存缓存客户端了吗?

我看到有一个用于 gevent 的 memcache 客户端端口(https://github.com/hjlarsson/gevent-memcache),但它自 2010 年 8 月以来一直没有更新。你们对使用 memcache 客户端有什么建议吗?事件?

0 投票
1 回答
229 浏览

python - 并行运行一系列函数来响应 HTTP 请求

我已经尝试了各种方法来解决这个问题,并想看看你们认为用 Python 解决这个问题的最佳方法是什么。

基本上,我有一个 Web 服务,它接受提供单个查询术语的请求,并继续使用该术语并行执行一系列计算。这些计算可以被认为是单独的函数调用。

这个想法是,一旦请求进来,我就异步调用函数,并保持请求直到结果开始流入。

根据我的研究,似乎使用像gevent这样的库可能是最好的方法,尽管我仍然不完全熟悉 greenlets。此外,似乎为了完成我正在寻找的功能类型(当结果可用时通过长请求将结果发送回客户端),我需要使用支持此功能的特殊类型的 StreamServer。响应本身只是 JSON 对象,前端的 JavaScript 模块将读取这些对象,当这些被发送回浏览器时,它反过来会更新 UI 组件。

这样做的最佳方法是什么?使用 gevent 之类的东西是否有意义,或者是否应该在没有库帮助的情况下使用协同程序来实现?我敢肯定,这里的很多人过去都做过很多事情,我想收集一些建议。

提前非常感谢,如果您想了解更多详细信息,请告诉我,我期待听到您的建议!

0 投票
2 回答
1796 浏览

python - python - Bottle+gevent 无法提供静态文件

我在我的 python webdev 实验中使用带有gevent的瓶子。我的问题是我不能提供静态文件,例如在我的模板中使用外部 css。我的文件夹结构是:/static/css/style.css

我的代码:

索引.py

路线.py

这是我从终端的回溯:

请帮忙。

更新:

我已经下载了不稳定版本的 Bottle(版本 0.11)并将其导入到我的脚本中。现在没有 500 错误和回溯,但是 style.css 给了我 404。

0 投票
5 回答
15390 浏览

python - Gevent 猴子补丁破坏多处理

我正在尝试使用多处理的池来运行一组进程,每个进程都将运行一个 gevent 的 greenlets 池。这样做的原因是有很多网络活动,但也有很多 CPU 活动,所以为了最大化我的带宽和我所有的 CPU 内核,我需要多个进程和 gevent 的异步猴子补丁。我正在使用多处理的管理器创建一个队列,进程将访问该队列以获取要处理的数据。

这是代码的简化片段:

这是它产生的异常:

我相信这一定是由于普通 socket 模块和 gevent 的 socket 模块的行为之间存在一些差异。

如果我在子进程中进行monkeypatch,则队列创建成功,但是当子进程尝试从队列中获取()时,会发生非常相似的异常。由于在子进程中执行大量网络请求,因此确实需要对套接字进行修补。

我的 gevent 版本,我认为是最新的:

有任何想法吗?