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)