1

我们gevent在一个长期存在的 Python 进程中使用,随着时间的推移,我们产生了成千上万的 Greenlet。

我们不会加入任何这些 Greenlets;我们只是产生并忘记。(Greenlet 任务本身是短暂的并且会退出。)可以吗? 我们是否因为不加入 Greenlets 而泄露了任何资源?

4

2 回答 2

1

从某种意义上说,您并没有泄漏资源,因为当 greenlet 死亡(并且垃圾收集发生,这是自动的)时,所有使用的内存都将被正确清理。所以我不会担心这个。

当然,您对架构的描述并没有使它看起来非常健壮。因此,虽然您本身不会泄漏内存,但如果您真的启动了太多的 greenlet,您可能会发现您的 main greenlet 很少执行。换句话说,每当它屈服于集线器(通过 sleep 或任何其他阻塞调用)时,您可能会发现在您的主 greenlet 恢复生机之前调用并执行了数千个 greenlet。

还要注意在集线器和greenlets之间来回切换的开销。

于 2015-06-25T21:16:51.843 回答
-1

我没有和 gevent 一起工作过,所以把这个和一粒盐一起吃吧。一般来说,对 join 的所有调用都是阻塞的,直到线程完成或死亡,这就是gevent docs中提到的所有内容。它通常仅用于同步线程,而不是用于清理,所以你应该没问题。

于 2015-03-19T01:54:49.783 回答