关于协程调用的几个问题
来源:13-4 call_soon、call_at、call_later、call_soon_threadsafe

慕后端4419857
2020-09-02
老师,您好。
关于协程调用的问题我有一个问题不太理解
async def main(obj, loop):
# 查询这个客户是否存在过滤条件
await weibo.find_filter(mongo_collect)
# 有重复的更新爬取信息然后进行更新操作
await weibo.get_dup_weibo_list(dup_weibo_list, mongo_collect)
# 插入mongo及redis数据库
await weibo.sava_redis(redis, weibo_list)
# 更新到user表
await weibo.update_user(art_list, mongo_collect)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
tasks = [main(kw) for kw in kw_list]
loop.run_until_complete(asyncio.wait(tasks))
我的问题是 :
1.我们的协程函数调用 是不是在 原来调用方式上加上一个await就可以了?即:awat func().
2.您看我的主函数内分别调用了这4个协程函数:
await weibo.find_filter(mongo_collect)
await weibo.get_dup_weibo_list(dup_weibo_list, mongo_collect)
await weibo.sava_redis(redis, weibo_list)
await weibo.update_user(art_list, mongo_collect)
请问他们的执行顺序是不是依次从上往下执行?
写回答
1回答
-
bobby
2020-09-03
不是所有的函数调用上加上await就可以的,只有这个函数是async函数才能这样调用
四个协程确实是顺序执行,但是第一个await调用后不会使得当前函数阻塞其他的函数, 你如果只是想提交出去4个并行运行而不关心返回结果,那么你不要使用await ,你使用create_future直接提交到asyncio执行就行了 这样4个协程就能同时去并发执行,而不用等到上一个执行完才能执行下一个,await主要适用于比如下一个需要等到上一个执行完才能执行的时候
062020-09-09
相似问题