关于协程调用的几个问题

来源: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

  1. 不是所有的函数调用上加上await就可以的,只有这个函数是async函数才能这样调用

  2. 四个协程确实是顺序执行,但是第一个await调用后不会使得当前函数阻塞其他的函数, 你如果只是想提交出去4个并行运行而不关心返回结果,那么你不要使用await ,你使用create_future直接提交到asyncio执行就行了 这样4个协程就能同时去并发执行,而不用等到上一个执行完才能执行下一个,await主要适用于比如下一个需要等到上一个执行完才能执行的时候

0
6
bobby
回复
慕后端4419857
https://www.cnblogs.com/lidabo/p/6042021.html 你看看这个
2020-09-09
共6条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程