【 在 JulyClyde 的大作中提到: 】
: 这几天妄want图to把一些小的程序放到cloudflare上去
: 发现他们提供的Request对象是个awaitable的东西
: 开发者要写一个on_fetch()
: ...................
async 之后的函数,就成了协程函数, 简单的说,
协程化以后, 一个线程里面可以并行多个协程任务(函数),
这些协程任务, 就是以task或者future为对象封装起来的,
这些多任务既然运行到同一个线程里面, 显然, 无法利用CPU或者系统的抢占多任务机制,
实际上, 协程多任务, 是一种协作多任务, 这个多任务的并行任务是需要有库框架协助完成的,
这个库就是asyncio做的, 而这个框架就是通过一个任务队列来完成的
loop = asyncio.get_event_loop()
而所有的协程任务, 就是通过不停的循环处理这个消息队列完成的。
mytask = loop.create_task()
从协程函数, 到任务的创建, 可以create_task 也可以构建future, 我印象里future更低级一些。
直接调用
loop.run_until_complete, 参数可以是一个list, 元素就是创建的tasks,
这个函数会把任务投入消息队列, 并启动协程任务执行。
这个函数默认就是任务完成了才会返回。 这个函数是默认连接普通函数和协程函数的纽带。
当然, loop里面还有其它类似的函数, 即使run_until_complete 也可以设置其它情况,
比如不等任务全完成, 设置超时就返回什么的...
loop.run_until_complete(asyncio.wait_for(asyncio.shield(asyncio.wait(task_wait_list)), 500))
run_until_complete 返回后, 就可以检查task或者future的result等返回值来确定任务的执行情况。
--
FROM 115.171.155.*