并发篇-python协程!

基于 epoll 的回调式编程模式,但是却难以使用。即使可以通过配合 生成器协程 进行复杂的封装,以简化编程难度。

但是仍然有一个大的问题: 封装难度大,现有代码几乎完全要重写gevent,通过封装了 libev(基于epoll) 和 greenlet 两个库。做好封装,允许以类似于线程的方式使用协程。

>>>gevent 并发服务器

进群:960410445  即可获取数十套PDF!

并发篇-python协程!

# 将 Python 内置的 socket 直接换成封装了 IO 多路复用的 socket

>>>from gevent import monkey; monkey.patch_socket()

# 工作协程的内容

>>>def worker_coroutine(conn):

# 生成一个协程,并将 conn 作为参数传入

>>>gevent.spawn(worker_coroutine, conn)

遇到阻塞就切换到另一个协程继续执行 !

  • 使用基于 epoll 的 libev 来避开阻塞
  • 使用基于 gevent 的 高效协程 来切换执行
  • 只在遇到阻塞的时候切换,没有轮询的开销,也没有线程的开销

Gevent 是一个第三方库,可以轻松通过gevent实现协程程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。

gevent会主动识别程序内部的IO操作,当子程序遇到IO后,切换到别的子程序。如果所有的子程序都进入IO,则阻塞。

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/85760845