python 异步关键字与gevent包

# coding:utf-8
# 异步的关键字 async, await
# async 的功能介绍:代表定义异步,无论多线程,多进程还是异步,都是对函数进行才做,所以想要函数异步,就需要在函数前面加上 async ;
# await 当定义了异步函数后,需要使用await关键字来执行异步函数

# asyncio模块 的 gather 与 run 函数的使用
# gather 将异步函数批量执行,参数 async fun, 返回List
# run  执行主异步函数,

# 异步案例
import time
import random
import asyncio


async def test_a():
    for i in range(5):
        _s_t = time.time()
        # asyncio.sleep() 也是异步的,前面需要加上await
        await asyncio.sleep(random.random() * 2)
        _e_t = time.time()
        print('test_a()方法的第 {} 次循环,随机休眠时间{}'.format(i, _e_t - _s_t))
    return 'test_a 运行结束'


async def test_b():
    for i in range(5):
        _s_t = time.time()
        # asyncio.sleep() 也是异步的,前面需要加上await
        await asyncio.sleep(random.random() * 2)
        _e_t = time.time()
        print('test_b()方法的第 {} 次循环,随机休眠时间{}'.format(i, _e_t - _s_t))
    return 'test_b 运行结束'


# 主函数
async def main():
    res = await asyncio.gather(test_a(), test_b())
    print(res)


if __name__ == "__main__":
    asyncio.run(main())
# coding:utf-8

# 异步关键字与gevent包 -- 2
# 第三方异步包 gevent , 常用函数
# spawn  创建协程对象 ,参数Fun, args,返回协程对象
# joinall 批量处理协程对象,参数是一个列表;


import time
import gevent
import random
import os


def gevent_test_a():
    for i in range(5):
        s_time = time.time()
        gevent.sleep(random.random() *2)
        e_time = time.time()
        print('gevent_test_a 方法的第 {} 次循环,耗时{}s,进程号:{}'.format(i, s_time - e_time, os.getpid()))
    return "a方法运行结束"

def gevent_test_b():
    for i in range(5):
        s_time = time.time()
        gevent.sleep(random.random() * 2)
        e_time = time.time()
    return "b方法运行结束"


if __name__ == '__main__':
    start_time = time.time()
    # gevent.spawn() 创建协程对象
    g_test_a = gevent.spawn(gevent_test_a)
    g_test_b = gevent.spawn(gevent_test_b)
#     gevent.joinall(List) 批量处理协程对象
    res = gevent.joinall([g_test_a, g_test_b])
    print('结果:', res)
    for j in res:
        print(j.value)

        # 获取协程状态
        # started属性 / ready() 方法:判断协程是否已启动。
        # successful()  方法:判断协程是否成功运行且没有抛出异常。
        # value属性:获取协程执行完之后的返回值。
        # 另外,greenlet协程运行过程中发生的异常是不会被抛出到协程外的,因此需要用协程对象的”exception”属性来获取协程中的异常。
        #
    end_time = time.time()
    print('总耗时:', end_time - start_time)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值