| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 560 人关注过本帖
标题:萌新学习笔记之协程
只看楼主 加入收藏
zxq0103
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2023-3-10
结帖率:0
收藏
 问题点数:0 回复次数:3 
萌新学习笔记之协程
# 协程是单一线程的多任务切换,占用资源少,无需互斥
# 适用于高并发任务处理,原理类似于yield
# 缺点是单线程,不能多核,不能被阻塞
# 标准库协程模块asyncio生态不好,用的人并不多
# 第三方协程模块有greenlet和Gevent
程序代码:
# 协程模块gevent是greenlet的升级版
# gevent只有要遇到本身供的阻塞函数时,才会跳转协程
#  如:gevent.sleep(2)或gevent.joinall([fun1,fun2,...])
import gevent

def fun1(arg1):
    print('fun1开始')
    print('参数:',arg1)
    gevent.sleep(2)
    print('fun1结束')
    
def fun2(arg1,arg2):
    print('fun2开始')
    print('参数1:',arg1)
    gevent.sleep(3)
    print('参数2:',arg2)
    print('fun2结束')

gv1 = gevent.spawn(fun1,1)
gv2 = gevent.spawn(fun2,1,2)
gevent.joinall([gv1,gv2])


运行结果:
fun1开始
参数: 1
fun2开始
参数1: 1
fun1结束
参数2: 2
fun2结束
搜索更多相关主题的帖子: print sleep 结束 参数 学习 
2023-04-28 11:54
sssooosss
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:3
帖 子:664
专家分:1115
注 册:2019-8-27
收藏
得分:0 
共同学习
2023-04-28 16:34
sssooosss
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:3
帖 子:664
专家分:1115
注 册:2019-8-27
收藏
得分:0 
共同进步
2023-04-29 10:10
zxq0103
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2023-3-10
收藏
得分:0 
gevent函数可以接管系统所有阻塞函数
实现方法通过genent的monkey函数接管
程序代码:
import gevent
from gevent import monkey
monkey.patch_time() # 系统阻塞函数必须在此函数后面导入
# 还可以用monkey.patch_all(),接管所有系统阻塞函数
from time import sleep # sleep函数必须在monkey_path对应的函数后导入

def fun1(arg1):
    print('fun1开始')
    print('参数:',arg1)
    # gevent.sleep(2)
    sleep(2)
    print('fun1结束')
    
def fun2(arg1,arg2):
    print('fun2开始')
    print('参数1:',arg1)
    # gevent.sleep(3)
    sleep(3)
    print('参数2:',arg2)
    print('fun2结束')

gv1 = gevent.spawn(fun1,1)
gv2 = gevent.spawn(fun2,1,2)
gevent.joinall([gv1,gv2])


运行结果:
fun1开始
参数: 1
fun2开始
参数1: 1
fun1结束
参数2: 2
fun2结束

[此贴子已经被作者于2023-4-29 14:47编辑过]

2023-04-29 13:58
快速回复:萌新学习笔记之协程
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016596 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved