V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wwqgtxx  ›  全部回复第 21 页 / 共 193 页
回复总数  3842
1 ... 17  18  19  20  21  22  23  24  25  26 ... 193  
2019-07-23 11:52:42 +08:00
回复了 waibunleung 创建的主题 Python 不死心,再来问一遍关于 Python 的 asyncio 问题
@waibunleung 有个建议,你可以尝试自己实现一下如何在单线程下完成“多任务”,基本上就是楼上所说有限状态机,很多单片机程序就是一个大的 while 循环套几组 switch,一组 switch 就是一个 task,每个 switch 的 flag 是一个标志量,内部执行到需要等待的时候就把 flag 值改成下一个代码块,随后主动退出,去让下一组 task 执行,这样实现“伪并发”。当然由于单片机的程序单一,硬件资源极为有限(很多单片机 ram 只有 1kb 甚至更小),这里的 task 是写死的。而 python 中相当于每次 while 循环的时候从队列头取出一组 switch(task)来执行,执行完后再进行下一轮 while (还有些 io 相关的操作暂时省略)
2019-07-23 11:45:01 +08:00
回复了 waibunleung 创建的主题 Python 不死心,再来问一遍关于 Python 的 asyncio 问题
@rocketman13 根据 python 的协程实现原理,只有在一个 coroutine 主动调用 await 或者 return 的时候才会发生 task 切换,虽然这里的 await task1 的目的是为了等待 task1 结束,但如果你在主 task 中永远不 await 任何一个 future 或者 return 的话(比如跑个死循环),其他 task 是永远不会被执行的。这点和线程可以剥夺式调度完全不同。( ps: python3.6 开始是可以检测一个 coroutine 执行了太长时间而发出警告的,但仍然不可主动剥夺)
2019-07-23 11:37:38 +08:00
回复了 waibunleung 创建的主题 Python 不死心,再来问一遍关于 Python 的 asyncio 问题
@waibunleung 作为事件循环,当你 await task1 把控制权交还的时候,这一轮循环已经结束,随后立即开始下一轮的事件循环,检查有没有其他任务这已经是下一轮循环干的事了
2019-07-23 07:47:04 +08:00
回复了 ufjfeng 创建的主题 Apple iOS 12.4 发布了
@billytom 不支持
2019-07-22 22:51:04 +08:00
回复了 waibunleung 创建的主题 Python 不死心,再来问一遍关于 Python 的 asyncio 问题
@waibunleung 关于__step 这个地方可能看一下 Python 的生成器那块会有更深的了解,最初的 asyncio 就是用生成器完成的,只是在后续版本中才逐步把 coroutines 和 generators 分离了,后续版本还有了异步生成器的概念,这些内容你可以看一下相关 PEP 文档,那里有解释为什么会采用这样的设计。
https://www.python.org/dev/peps/pep-0492/
https://www.python.org/dev/peps/pep-0525/
2019-07-22 20:52:15 +08:00
回复了 waibunleung 创建的主题 Python 不死心,再来问一遍关于 Python 的 asyncio 问题
讲道理,我在你上一个问题的#14 和#16 已经分析过 task 在 init 是怎么把自己放进 eventloop 了,核心点还是在于 call_soon

另外你提到的 pycharm 跳转到 pyi 文件的问题,那个 pyi 只是用来做类型标记的,并没有具体的实现,如果你想看到实现可以临时去 pycharm 的用户目录把包含 pyi 的目录暂时移走就能进入真正的.py 文件了。
上面提到了有一部分 eventloop 会涉及到 c 代码,其实那大部分是涉及到怎么 pull 一个 fd 的,并不影响你阅读了解 asyncio 模块的工作原理。对于一个 SelectorEventLoop 是可以纯 python 代码实现的( python3.5 的就是纯 py 代码实现),c 代码只是为了优化性能,大部分情况下源码中还有有纯 python 的替代实现,你可以仔细看看
2019-07-22 09:32:02 +08:00
回复了 yang59324 创建的主题 问与答 500 元以下蓝牙耳机求推荐
无脑推荐 qcy t1,99 的真无线耳机,还要什么自行车(现在好像降价到 79.9 了)
2019-07-22 09:29:56 +08:00
回复了 mouyase 创建的主题 宽带症候群 频繁的被室友偷拔网线,请问有什么手段回击
我倒是觉得你要是想省事,买根网线和路由器给你室友用,大家都快也就无所谓了(讲道理,你接网线对他们的速度影响还是挺大的🤫)
2019-07-21 12:37:31 +08:00
回复了 brucecobb 创建的主题 Chrome Python BaseHTTPServer 模块
有一个 threading 选项的
2019-07-19 11:24:09 +08:00
回复了 Barton 创建的主题 iPhone 请问目前市面上有没有这样的移动电源?
羽博家有
2019-07-19 09:21:55 +08:00
回复了 yuthelloworld 创建的主题 问与答 如何购买一个带公网 ip 的云服务器?
@yuthelloworld #8 当然也是花钱买的咯
2019-07-18 16:50:36 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
@waibunleung 你自己都在等待别人了,怎么还能同时输出呢
2019-07-18 00:03:10 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
@silentsee 本质上协程和线程调度一样,在没有锁、等待条件这些控制因素下并不保证调度顺序,所以在实现上无论如何实现都不属于 bug
2019-07-17 14:31:34 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
await 的意思是阻塞自己,等待别人结束
在调度器看来,你调用了 await 就把你当前的任务暂停,然后去做别的事,当你等待的任务结束了再择机继续执行当前任务(注意不是立刻执行,是择机执行)
2019-07-17 14:28:44 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
@waibunleung 没有问题呀,await 是等待另一个 task 结束,并不是等待另一个 task 阻塞
2019-07-17 12:55:26 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
@waibunleung 对于协程来说,本来就是只有在 await 的时候才会把当前 task 阻塞,并执行其他 task,或者当前 task return 了
2019-07-17 12:51:51 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
@Vegetable #19 没有任何好处,只不过可以作为底层实现的一种方式,gather 内部是创建了一个新的 future 配合 done_callback 来解决这个问题
2019-07-17 07:31:20 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
2019-07-17 07:18:26 +08:00
回复了 waibunleung 创建的主题 Python python3.7 中的 async/await 以及 asyncio 问题
@jaskle c#也有这种用法,又不是 js 家的专利🙄
1 ... 17  18  19  20  21  22  23  24  25  26 ... 193  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1245 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 42ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
Developed with CodeLauncher
♥ Do have faith in what you're doing.