网站模板库
  • 首页
  • web前端工具
    • HTML/JS转换工具
    • JS/HTML格式化工具
    • 字母/英文大小写转换工具
    • robots.txt文件生成工具
    • Js压缩/格式化工具
    • Css在线压缩工具_代码格式化
  • 关于我们
    • 免责声明
    • 联系我们
    • 广告服务
    • 服务项目
    • 关于我们
    • 网站轮播
    • 公告
    • 成都优优科技专用
    • 按行业分类
  • web学院
    • 服务器教程
    • 学习资料
      • 基础书籍
      • 交互书籍
      • 入门教程
      • 特效分类
    • 案例分享
    • web资讯
  • 网页特效
    • 图片特效
    • 导航特效
    • 滑动按钮
    • 表单特效
    • 文字特效
    • 弹窗特效
    • 其他特效
  • 织梦模板
    • 科技/电子/数码/通信
    • 文化/艺术/广告/传媒
    • 装修/设计/家居/家具
    • 基建/施工/地产/物业
    • 餐饮/酒店/旅游/票务
    • 食品/果蔬/饮料/日用
    • 服饰/珠宝/礼品/玩具
    • 摄影/婚庆/家政/生活
    • 运动/健身/体育/器材
    • 学校/教育/培训/科研
    • 美容/保健/医院/医疗
    • 金融/财税/咨询/法律
    • 政府/组织/集团/协会
    • 汽车/物流/交通/搬运
    • 机械/设备/制造/仪器
    • 化工/环保/能源/材料
    • 农业/畜牧/养殖/宠物
    • 其他模版
    • IT/软件/信息/互联网
  • 手机模板
    • 手机APP模板
    • 微信小程序模板
    • wap
  • 网站模板
    • joomla模板
    • Drupal模板
    • z-blog模板
    • EyouCms模板
    • Bootstrap模板
    • 帝国cms模板
    • CmsEasy模板
    • MetInfo模板
    • 购物商城模板
      • Shopify主题
      • PrestaShop主题
    • 后台模板
    • 纯HTML模板
    • ecshop模板
    • phpwind模板
    • pbootcms模板
    • phpcms模板
    • wordpress模板
    • discuz模板
  • 教程
    • 织梦教程
    • Discuz教程
    • WordPress教程
    • Phpcms教程
    • Phpwind教程
    • ECShop教程
    • Joomla教程
    • Drupal教程
    • zblog教程
    • EyouCMS教程
    • 帝国cms教程
    • MetInfo教程
    • CmsEasy教程
登录
当前位置:网站模板库 > web学院 > 案例分享 > 一个关于协程的 Python 面试题
admin 案例分享 2023-06-22 20:31:57

一个关于协程的 Python 面试题

一个关于协程的 Python 面试题,第1张

一个关于协程的 Python 面试题,第2张

之前面试遇到这么一道有趣的题目,但是只给出一个输入用例,我写的代码可以通过这个输入用例,但是其它不知道的输入用例没法通过,不知道有没有大佬有啥思路吗?

这个是题目的链接: https://drive.google.com/drive/folders/1KQ6LYQcbhdINcVB1ChayloO01oXR1hF6?usp=sharing

import asyncio

def main():
    async def do_sync_f():
        return sync_f()

    loop = asyncio.get_event_loop()

    task_g = loop.create_task(async_g())
    task_f = loop.create_task(do_sync_f())

    tasks = [
        task_g, task_f
    ]

    loop.run_until_complete(asyncio.wait(tasks))

    print(max(task_g.result(), task_f.result()))


if __name__ == '__main__':
    main()
----------------------- 以下是精选回复-----------------------

答:有些 async 函数写的不好调用 run untill complete 你再调用 run untill complete 会出错
答:看了一遍题目,感觉你完全没理解这道题要考查什么。建议看看 https://docs.python.org/3/library/asyncio-task.html#running-in-threads ,另外,根据 python 版本不同,提供的函数不同。
答:你的这个写法并不正确,要知道 sync_f 里面的代码是会阻塞线程的,如果你 sync_f 和 async_g 都在主线程跑,那么如果 sync_f 先执行,event loop 就要等到 sync_f 解除阻塞才会执行 async_g ,那么 sync_f 和 async_g 并不 parallel ,你现在的代码之所以看起来并行,实际上是 async_g 先执行了,你可以在两个函数的开头写个 print 看看。

调用顺序对 event loop 的影响如下

import asyncio
import time

async def f():
time.sleep(3)

async def g():
await asyncio.sleep(3)

async def main():
start = time.time()
# await asyncio.gather(f(), g()) # cost 6.006543159484863
# await asyncio.gather(g(), f()) # cost 3.0021119117736816
print(f"cost {time.time()-start}")

asyncio.run(main())

所以,这题中 sync_f 必须放到另外的线程执行
答:博客欢迎赐教。或者问一下 ChatGPT 吧,它协助你,通关比较快。
答:这是 GPT4 的回答,考察的应该是:asyncio.to_thread 这个知识点。

You can use asyncio.to_thread() to run the synchronous function sync_f() in a separate thread, allowing it to run concurrently with the asynchronous function async_g(). Here's how you can achieve this:
python

Copy

import asyncio
import threading
import time

def sync_f(a=None):
lock = threading.Lock()
lock.acquire(blocking=False)
lock.acquire(timeout=3)
return 2

async def async_g(a=None):
await asyncio.sleep(3)
return 1

async def main():
# Run sync_f() in a separate thread and async_g() concurrently
sync_f_task = asyncio.to_thread(sync_f)
async_g_task = async_g()

results = await asyncio.gather(sync_f_task, async_g_task)
print(results)

if __name__ == "__main__":
asyncio.run(main())
This code will run both sync_f() and async_g() concurrently, and print their results once both are completed.

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 一个关于协程的 Python 面试题

admin 钻石

分享到:
上一篇
Amazon CloudFront 被墙情况如何?
下一篇
虚拟服务器的 dns 总会重置为默认值应该怎么办?

相关推荐

JAXRS 能不能像 servlet 一样通过文件设置 url 而不是通过注解写死?

JAXRS 能不能像 servlet 一样通过文件设置 url 而不是通过注解写死?

关于 flask 模板的问题

关于 flask 模板的问题

Python smtplib 的发送间断性失败

Python smtplib 的发送间断性失败

Google App Engine 开始支持 PHP

Google App Engine 开始支持 PHP

0条评论

发表评论 取消回复

要发表评论,您必须先登录。

提供最优质的资源集合

立即查看 了解详情
网站模板库

主题/付费下载/查看/余额管理/自定义积分,集成支付,卡密,推广奖励等。

本站导航
  • 链接标题
友情链接
  • 链接标题
快速搜索
本站由钛宇宙强力驱动
友情链接:
    商业源码网蜀ICP备2023005044号
    网站模板库
    • 登录
    • 注册
    网站模板库
    • 首页
    • web前端工具►
      • HTML/JS转换工具
      • JS/HTML格式化工具
      • 字母/英文大小写转换工具
      • robots.txt文件生成工具
      • Js压缩/格式化工具
      • Css在线压缩工具_代码格式化
    • 关于我们►
      • 免责声明
      • 联系我们
      • 广告服务
      • 服务项目
      • 关于我们
      • 网站轮播
      • 公告
      • 成都优优科技专用
      • 按行业分类
    • web学院►
      • 服务器教程
      • 学习资料►
        • 基础书籍
        • 交互书籍
        • 入门教程
        • 特效分类
      • 案例分享
      • web资讯
    • 网页特效►
      • 图片特效
      • 导航特效
      • 滑动按钮
      • 表单特效
      • 文字特效
      • 弹窗特效
      • 其他特效
    • 织梦模板►
      • 科技/电子/数码/通信
      • 文化/艺术/广告/传媒
      • 装修/设计/家居/家具
      • 基建/施工/地产/物业
      • 餐饮/酒店/旅游/票务
      • 食品/果蔬/饮料/日用
      • 服饰/珠宝/礼品/玩具
      • 摄影/婚庆/家政/生活
      • 运动/健身/体育/器材
      • 学校/教育/培训/科研
      • 美容/保健/医院/医疗
      • 金融/财税/咨询/法律
      • 政府/组织/集团/协会
      • 汽车/物流/交通/搬运
      • 机械/设备/制造/仪器
      • 化工/环保/能源/材料
      • 农业/畜牧/养殖/宠物
      • 其他模版
      • IT/软件/信息/互联网
    • 手机模板►
      • 手机APP模板
      • 微信小程序模板
      • wap
    • 网站模板►
      • joomla模板
      • Drupal模板
      • z-blog模板
      • EyouCms模板
      • Bootstrap模板
      • 帝国cms模板
      • CmsEasy模板
      • MetInfo模板
      • 购物商城模板►
        • Shopify主题
        • PrestaShop主题
      • 后台模板
      • 纯HTML模板
      • ecshop模板
      • phpwind模板
      • pbootcms模板
      • phpcms模板
      • wordpress模板
      • discuz模板
    • 教程►
      • 织梦教程
      • Discuz教程
      • WordPress教程
      • Phpcms教程
      • Phpwind教程
      • ECShop教程
      • Joomla教程
      • Drupal教程
      • zblog教程
      • EyouCMS教程
      • 帝国cms教程
      • MetInfo教程
      • CmsEasy教程

      弹窗标题

      这是一条网站公告,可在后台开启或关闭,可自定义背景颜色,标题,内容,用户首次打开关闭后不再重复弹出,此处可使用html标签...