day⑨: 协程_gevent

Posted 寻找伯乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day⑨: 协程_gevent相关的知识,希望对你有一定的参考价值。

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


例子: 

gevent_同步与异步的性能区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import gevent
 
def task(pid):
    """
    Some non-deterministic task
    """
    gevent.sleep(0.5)
    print(‘Task %s done‘ % pid)
 
def synchronous():
    for i in range(1,10):
        task(i)
 
def asynchronous():
    threads = [gevent.spawn(task, i) for i in range(10)]
    gevent.joinall(threads)
 
print(‘Synchronous:‘)
synchronous()
 
print(‘Asynchronous:‘)
asynchronous()


运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
D:\python35\python.exe D:/pycharm_project/s12/day9/协程_gevent/gevent_同步与异步的性能区别.py
Synchronous:
Task 1 done
Task 2 done
Task 3 done
Task 4 done
Task 5 done
Task 6 done
Task 7 done
Task 8 done
Task 9 done
Asynchronous:
Task 0 done
Task 9 done
Task 8 done
Task 7 done
Task 6 done
Task 5 done
Task 4 done
Task 3 done
Task 2 done
Task 1 done






以上是关于day⑨: 协程_gevent的主要内容,如果未能解决你的问题,请参考以下文章

day_6.17 gevent版服务器

Python入门学习-DAY37-进程池与线程池协程gevent模块

day10-3-协程(gevent)解决socket并发

tcp_server_协程gevent版本

gevent协程之猴子补丁带来的坑

Python_Note_Day 10_Coroutine