问题标签 [greenlets]

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 投票
1 回答
601 浏览

python - 为什么 gevent 执行这个未加入的 greenlet?

代码:

输出:

期待:

我从来没有加入第一个greenlet,所以我希望它永远不会执行;或者,考虑到长时间的 sleep(),它应该在第二个 greenlet 之后完成。

语境:

我希望能够启动一个“一次性”greenlet,它填充一个我从不加入的缓存,我也不想阻止等待结果。

0 投票
1 回答
1119 浏览

python - gunicorn + gevent monkey 是否自动将 threadlocals 修补为 greenlet-locals?

在 gevent 模式下运行 gunicorn 时,是否已经自动应用了此处描述的猴子补丁(尤其是用于线程本地的补丁),这些补丁使 threadlocals greenlet-locals?

(我正在运行 django 并且目前使用 threadlocals 来快速缓存大型查询结果——我知道 gevent/greenlet 使用传统线程的替代模型,因此我担心)。

0 投票
4 回答
47294 浏览

python - 格林莱特VS。线程

我是 gevents 和 greenlets 的新手。我找到了一些关于如何使用它们的好文档,但没有一个给我关于如何以及何时使用 greenlets 的理由!

  • 他们真正擅长的是什么?
  • 在代理服务器中使用它们是否是个好主意?
  • 为什么不是线程?

我不确定的是,如果它们基本上是协同程序,它们如何为我们提供并发性。

0 投票
1 回答
5247 浏览

python - 捕获greenlets中引发的异常

我正在尝试捕捉greenlets中引发的异常。根据本教程,不幸的是'Greenlet中提出的异常,留在Greenlet中'。在下面的代码中,我有一个同步方法,它会生成爬虫绿叶。那些爬虫会引发 HTTPError 异常,我需要在同步方法的主体中捕获它。基于异常,在sync方法中我会设置Account对象的相应状态。知道如何在同步方法中捕获 greenlets 中引发的异常以完成此操作吗?先感谢您!

0 投票
1 回答
112 浏览

python - 使用 `greenlet` 作为装饰器

用作装饰器是否有意义greenlet.greenlet,将常规函数转换为greenlet,如下所示:

当然,我假设我打算使用函数f并且g只作为greenlets。

这种方法是否有任何隐藏的陷阱或其他缺点?

0 投票
1 回答
14145 浏览

python - MongoDB 中的连接池如何使用 pymongo 驱动程序?

我在基于 gevent 的框架上使用 mongodb 和 pymongo 驱动程序。我不明白工作池连接。我正在为每个请求创建一个新的连接实例:

实际上连接取自一个池?

现在,如果我这样连接:

这是来自同一个池的连接吗?如果你调用 MongoClient 不同的参数会发生什么?

0 投票
2 回答
2722 浏览

python - 从已经运行的 python 脚本调用方法

我是 python 新手,并且已经为此苦苦挣扎了很长一段时间。好的,所以我有一个程序可以登录到服务器,然后每 10 秒不断地 ping 服务器,以查看服务器的状态是否已更改。在同一个脚本中,我有一个向服务器发送消息的函数。

发送方法的一个简单示例:

我可以在这个脚本运行时从另一个脚本调用这个方法吗?就像使用同一个会话一样。似乎当我运行调用此函数的脚本时,它会创建它的一个新实例,而不是使用该脚本的当前实例,导致它抛出我的异常,说我没有连接到服务器。

对不起菜鸟问题。我已经尝试谷歌搜索了一段时间,但我似乎无法找到答案。我已阅读以下内容,但这些并没有解决问题:

类内的Python调用函数

将当前函数转换为变量的 Python 代码?

嗨 @nFreeze 感谢您的回复,我尝试使用 ZeroRPC 但每次运行您提供的脚本/示例(显然已编辑)时,我都会遇到此错误:

即使我已经安装了 gevent。我不知道如何解决这个问题。现在已经在谷歌上搜索了一个小时。

0 投票
1 回答
594 浏览

python - 如果我还没有启动 greenlet,为什么 greenlet.getcurrent() 会起作用?

为什么会这样:

我还没有开始任何 greenlets,那么 getcurrent() 返回的是什么?导入包时是否有“默认greenlet”运行?或者这只是我当前程序堆栈的“greenlet 表示”。

0 投票
2 回答
1323 浏览

python - 正确的greenlet终止

我正在使用 gevent 下载一些 html 页面。有些网站太慢了,有些网站在一段时间后停止服务请求。这就是为什么我必须限制我提出的一组请求的总时间。为此,我使用 gevent“超时”。

但它的问题是当异常触发时我会失去所有状态。

想象一下我抓取网站“www.test.com”。在站点管理员决定切换网络服务器进行维护之前,我已经设法下载了 10 个 URL。在这种情况下,当异常触发时,我将丢失有关已抓取页面的信息。

问题是 - 即使发生超时,我如何保存状态和处理数据?

0 投票
1 回答
327 浏览

python-3.x - 实现无堆栈 Python

我真的很佩服 Stackless Python 的功能,我一直在寻找一种方法来模拟它的语法,同时仍然使用标准的 Python 3 解释器。Alex J. Champandard 在 gamedev 博客中的一篇文章使 greenlet 库看起来可以提供此功能。我稍微修改了他的代码,但我能想到的最好的临时 tasklet 包装器是一个在变量中包含一个 greenlet 的类,如下所示:

switch()然后,该函数通过在调用其方法时将变量传递给 greenlet 来模拟 Stackless 的调度。

到目前为止,这似乎可行,但我希望能够以原始的 Stackless 语法调用 tasklet,例如tasklet(function)(*args),与当前的语法相反tasklet(function,*args)。我不确定在哪里查看文档以了解如何完成此操作。这是否可能,或者它是 Stackless 对解释器的更改的一部分?