加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python:协程

发布时间:2020-12-17 00:01:23 所属栏目:Python 来源:网络整理
导读: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,如何实现在两个函数之间的切换?

(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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读