Gevent同步和异步怎么执行

本篇内容介绍了“Gevent同步和异步怎么执行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站制作、盘州网络推广、小程序设计、盘州网络营销、盘州企业策划、盘州品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供盘州建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

gevent是一个基于libev的并发库。它为各种并发和网络相关的任务提供了整洁的API。

Greenlets

在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。

在任何时刻,只有一个协程在运行。

这与multiprocessingthreading等提供真正并行构造的库是不同的。 这些库轮转使用操作系统调度的进程和线程,是真正的并行。

同步和异步执行

并发的核心思想在于,大的任务可以分解成一系列的子任务,后者可以被调度成 同时执行或异步执行,而不是一次一个地或者同步地执行。两个子任务之间的 切换也就是上下文切换

在gevent里面,上下文切换是通过yielding来完成的. 在下面的例子里, 我们有两个上下文,通过调用gevent.sleep(0),它们各自yield向对方。

import gevent
def foo():    print('Running in foo')    gevent.sleep(0)    
   print('Explicit context switch to foo again')
   
def bar():    print('Explicit context to bar')    gevent.sleep(0)    
   print('Implicit context switch back to bar') gevent.joinall([    gevent.spawn(foo),    gevent.spawn(bar), ])
Running in foo
Explicit context to bar
Explicit context switch to foo again
Implicit context switch back to bar

下图将控制流形象化,就像在调试器中单步执行整个程序,以说明上下文切换如何发生。

Gevent同步和异步怎么执行

当我们在受限于网络或IO的函数中使用gevent,这些函数会被协作式的调度, gevent的真正能力会得到发挥。Gevent处理了所有的细节, 来保证你的网络库会在可能的时候,隐式交出greenlet上下文的执行权。 这样的一种用法是如何强大,怎么强调都不为过。或者我们举些例子来详述。

“Gevent同步和异步怎么执行”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网站题目:Gevent同步和异步怎么执行
路径分享:http://azwzsj.com/article/jsihci.html