我们在长期使用Python的过程中使用gevent
,随着时间的推移,我们会产生成千上万的Greenlets。
我们不加入任何这些Greenlets;我们只是产生并忘记了。 (Greenlet任务本身是短暂的,并且退出。)这样可以吗? 我们是否因未加入Greenlets而泄漏任何资源?
答案 0 :(得分:1)
在greenlet死亡时(垃圾收集发生,这是自动的),所有使用过的内存都将被正确清理,你没有泄漏资源。所以我不担心。
当然,您对架构的描述并不会使其看起来非常强大。因此,虽然你本身没有泄漏内存,但如果你真的开始使用太多的greenlet,你可能会发现你的主要greenlet很少执行vey。换句话说,每当它产生到集线器(通过睡眠或任何其他阻塞调用)时,您可能会发现在主greenlet恢复生命之前会调用并执行数千个greenlet。
还要注意在集线器和greenlets之间来回切换的开销。
答案 1 :(得分:-1)
我还没有和gevent一起工作过,所以带上一粒盐。通常使用线程,所有对join的调用都会阻塞,直到线程完成或死亡,这就是gevent docs中提到的所有内容。它通常仅用于同步线程,而不是用于清理,所以你应该没问题。