栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程、协程、进程笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程、协程、进程笔记

线程、协程、进程踩过的坑 线程:

join(timeout):指合并线程为顺序执行,且优先占用。
setDaemon(False):守护线程:默认为False。若为True,意指当主线程完成后,强行杀死所有线程,不管有没有完成。

进程

开进程要写在if name == ‘main’:当中
join(timeout):指合并进程为顺序执行,且优先占用。
数据共享:Value、Queue,Manager
坑:
进程池不能用Queue,无法开启进程。需要用Manager().Queue()

协程

await 挂起、止步,等待这部分代码执行完成后在回来执行剩下的代码
1、创建协程任务
2、创建事件循环
3、跑循环直到它完成

生产者消费者的两种方式
1、总体输出后消费

return await asynico.wait(tasks)

2、边输出边消费
yield : 带有 yield 的函数是一个生成器 ,函数返回某个值时,会停留在某个位置,返回函数值后,会在前面停留的位置继续执行,直到程序结束
await也是挂在一个位置,此时如遇io阻塞,则切换协程代码块继续运行,当阻塞处完成后再切换回来仅需执行。
正确代码如下:#as_completed返回一个生成器

   tasks = [
        asyncio.ensure_future(coroutine1),
        asyncio.ensure_future(coroutine2),
        asyncio.ensure_future(coroutine3)
    ]
    for task in asyncio.as_completed(tasks):
        result = await task
        print(f'Task result: {result}')

不恰当如下:#循环事件tasks事件的话,是按照顺序来切换协程的。

    tasks = [
        asyncio.ensure_future(coroutine1),
        asyncio.ensure_future(coroutine2),
        asyncio.ensure_future(coroutine3)
    ]
    
    for task in tasks:
        result = await task
        print('Task ret: {}'.format(result))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/683167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号