什么是greenlet?

Mik*_*sta 5 python gevent

我是 gevent 的新手。我已经阅读了gevent 的介绍

他们提供了简单的例子,但我很难理解什么是greenlet。来自学习并发。

Greenlets are a very lightweight coroutine written in C that
are cooperatively scheduled. They provide us with a very lightweight thread-
like object that allows us to achieve concurrent execution within our Python
programs without incurring the cost of spinning up multiple threads.
Run Code Online (Sandbox Code Playgroud)

greenlets不是线程?同步点是如何定义的?有人可以举例说明吗?

eat*_*ish 7

同步编程一次只能做一件事。因此,当数据库查询正在运行时,其他所有人(比如通过 Web 框架拉出网页)都必须等待它完成。

Gevent 通过使用上下文切换和事件使其异步。这是什么意思?像这样想。你有一个等待事情发生的队列,同时 gevent 说,好的,你可以等待,我将转到下一个任务并开始做我等待你完成的事情(比如数据库读取,或等待用于用户输入),当您完成后,当我返回我的队列并且您说您已准备好进行下一步时,我会为您专注于此。

这样,虽然仍然是单线程的,但应用程序可以超快地在作业之间切换,不断检查状态以查看它是否值得关注,同时,在等待您的同时可以完成其他事情。

与由操作系统处理且繁重的多线程相反,它们需要自己的资源,并且在它们之间切换很昂贵。

Gevent 可以轻松地将通常使用线程的内容转换为 greenlets。

  • asyncio 适用于 Python 3,它是执行异步线程的另一种方式,与 Javascript 的处理方式非常相似。您有异步调用、等待回调和收益。我发现 GEVENT 的性能更高,编码也更容易十亿倍,因为基本的 Python 代码大部分保持不变。Gevent Monkey 修补了所有 IO 库,并且只是使它们异步。其余的就像任何正常的线程操作一样。我个人更喜欢 gevent,但这只是一个偏好,而不是技术建议。两者都只是工具。 (6认同)