什么是greenlet?

时间:2018-04-05 09:46:21

标签: 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.

Greenlets不是线程? 如何定义同步点?可以用例子来解释吗?

1 个答案:

答案 0 :(得分:1)

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

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

通过这种方式,虽然仍然是单线程,但应用程序可以在作业之间快速切换,不断检查状态以查看是否值得关注,同时,其他事情可以在等待你时完成。

与操作系统处理的多线程相比,它们需要自己的资源,并且切换成本很高。

Gevent将通常使用线程的东西转换为greenlets很容易。