【python学习】Python协程

协程,又称微线程,纤程。英文名Coroutine。

def A():
    print '1'
    print '2'
    print '3'

def B():
    print 'x'
    print 'y'
    print 'z'

假设由协程执行,在执行A的过程中,可以随时中断,去执行B,B也可能在执行过程中中断再去执行A,结果可能是:

1
2
x
y
3
z

python 3协程

# 导入协程模块
import asyncio
# 创建由async修饰的函数
async def request(url):
    print("正在请求的url是", url)
    print("请求成功", url)
# async修饰的函数调用之后返回一个协程对象
c = request("www.baidu.com")
# 创建一个事件循环对象
loop = asyncio.get_event_loop()
# 将协程对象注册到loop中,然后启动loop
loop.run_until_complete(c)

显示结果:

正在请求的url是 www.baidu.com
请求成功 www.baidu.com

协程task使用

# task的使用
loop = asyncio.get_event_loop()
# 基于loop创建一个task对象
task = loop.create_task(c)
print(task)
loop.run_until_complete(c)

协程future

# future的使用
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(c)
print(task)
loop.run_until_complete(task)
print(task)

使用回调

# 设置回调函数
def callback_func(task):
    print(task.result())


# 绑定回调
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(c)
# 将回调函数绑定到任务对象中
task.add_done_callback(callback_func)
loop.run_until_complete(task)
正在请求的url是 www.baidu.com
请求成功 www.baidu.com
www.baidu.com

多任务异步协程

import asyncio
import time


async def request(url):
    print("正在下载", url)
    # 在异步协程中出现了同步模块中的代码,那就无法实现异步
    # time.sleep(2)
    # 当在asyncio中阻塞操作必须进行手动挂起
    await asyncio.sleep(2)
    print(url, "下载完毕")


urls = [
    'www.baidu.com',
    'www.sogou.com',
    'www.douban.com'
]
stasks = []
for url in urls:
    c = request(url)
    task = asyncio.ensure_future(c)
    stasks.append(task)
start = time.time()
loop = asyncio.get_event_loop()
# 需要将任务列表封装到wait中,再传入其中
loop.run_until_complete(asyncio.wait(stasks))
print(time.time() - start)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇