线程、协程、进程笔记

线程、协程、进程笔记,第1张

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5683726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存