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))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)