首页 Python python:协程

python:协程

1,如何实现在两个函数之间的切换?def func1():print(l)yieldprint(3)yielddef func2():g =func1()next(g)print(2)next(g)print(4)func2()2,协程import timefrom greenlet import greenlet # 在单线程中切换状态的模块def eat1():print(吃鸡腿1)g2.switch()t

1,如何实现在两个函数之间的切换?

(3
=(2(4

2,协程

greenlet greenlet
(5(<span style=”color: #0000ff”>def<span style=”color: #000000″> eat2():
<span style=”color: #0000ff”>print(<span style=”color: #800000″>'<span style=”color: #800000″>吃饺子1<span style=”color: #800000″>'<span style=”color: #000000″>)
g1.switch()
time.sleep(3<span style=”color: #000000″>)
<span style=”color: #0000ff”>print(<span style=”color: #800000″>'<span style=”color: #800000″>白切鸡<span style=”color: #800000″>'<span style=”color: #000000″>)

g1 =<span style=”color: #000000″> greenlet(eat1)
g2 =<span style=”color: #000000″> greenlet(eat2)
g1.switch()

3,gevent

gevent time
gevent
threading (1231(456<span style=”color: #0000ff”>def<span style=”color: #000000″> func2():
<span style=”color: #0000ff”>print(current_thread().name) <span style=”color: #008000″>#<span style=”color: #008000″> dummythread
<span style=”color: #0000ff”>print(<span style=”color: #800000″>'<span style=”color: #800000″>hahaha<span style=”color: #800000″>'<span style=”color: #000000″>)
time.sleep(1<span style=”color: #000000″>)
<span style=”color: #0000ff”>print(<span style=”color: #800000″>'<span style=”color: #800000″>10jq<span style=”color: #800000″>'<span style=”color: #000000″>)

g1 = gevent.spawn(func1) <span style=”color: #008000″>#<span style=”color: #008000″> 遇见他认识的io会自动切换的模块
g2 =<span style=”color: #000000″> gevent.spawn(func2)
gevent.joinall([g1,g2])

4,效率对比

gevent time
gevent

<span style=”color: #0000ff”>def<span style=”color: #000000″> task(args):
time.sleep(1<span style=”color: #000000″>)
<span style=”color: #0000ff”>print<span style=”color: #000000″>(args)

<span style=”color: #0000ff”>def sync_func(): <span style=”color: #008000″>#<span style=”color: #008000″> 同步
<span style=”color: #0000ff”>for i <span style=”color: #0000ff”>in range(10<span style=”color: #000000″>):
task(i)

<span style=”color: #0000ff”>def async_func(): <span style=”color: #008000″>#<span style=”color: #008000″> 异步
g_l =<span style=”color: #000000″> []
<span style=”color: #0000ff”>for i <span style=”color: #0000ff”>in range(10<span style=”color: #000000″>):
g_l.append(gevent.spawn(task,i)) <span style=”color: #008000″>#<span style=”color: #008000″> 给写成任务传参数
<span style=”color: #000000″> gevent.joinall(g_l)

start =<span style=”color: #000000″> time.time()
sync_func()
<span style=”color: #0000ff”>print(time.time() -<span style=”color: #000000″> start)

start =<span style=”color: #000000″> time.time()
async_func()
<span style=”color: #0000ff”>print(time.time() – start)

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/kaifa/python/20200729/7334.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部