【问题标题】:What is greenlet?什么是绿叶?
【发布时间】:2018-09-15 02:09:49
【问题描述】:

我是 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 不是线程? 同步点如何定义?有人能举例说明吗?

【问题讨论】:

    标签: python gevent


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • asyncio 和 gevent 有什么区别?
    • asyncio 适用于 Python 3,它是另一种执行异步线程的方式,与 Javascript 处理它的方式非常相似。你有异步调用、等待回调和收益。我发现 GEVENT 的性能更高,编码更容易十亿倍,因为基本的 Python 代码基本保持不变。 Gevent Monkey 修补了所有的 IO 库,只是让它们异步。其余的就像任何正常的线程操作一样。我个人更喜欢 gevent,但这只是一个偏好,而不是技术建议。两者都只是工具。
    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多