大佬们 我这协程写的有毛病吗?

2020-01-19 14:39:27 +08:00
 Ritter

想用 Python 做一个后台扫描工具
仿照 asyncio 官网的生产者消费者模式写了一个 demo
发现运行到一半会阻塞住(有时会,有时不会?)
但我看着貌似不会卡住啊
求大佬救救孩子

6920 次点击
所在节点    Python
55 条回复
Ritter
2020-01-19 16:15:52 +08:00
@jyyx
@Vegetable 可是异常不会向上传播吗?
Ritter
2020-01-19 16:18:04 +08:00
@BBrother 输出是有输出的 就是有概率会阻塞
ipwx
2020-01-19 16:18:19 +08:00
@Ritter 异常无论是不是向上传播,q.task_done 都不能执行了呀,然后 join() 一定会卡住啊。。。

try:
...
finally:
q.task_done()
Vegetable
2020-01-19 16:28:09 +08:00
@Ritter 因为你没有直接 await crawl,所以这个异常应该是不会传播的。程序不会因此退出
pmispig
2020-01-19 16:38:37 +08:00
请问这是什么字体,看着真舒服
Ritter
2020-01-19 16:39:06 +08:00
@jyyx
@Vegetable
@ipwx
是报异常了 原因也是因为异常导致 put 的数量和 task_done 不一致
学到了 感谢各位大佬的鼎力相助
谢谢谢谢~~
chenqh
2020-01-19 16:39:18 +08:00
log 呀
Ritter
2020-01-19 16:41:38 +08:00
@pmispig 这是 carbon 网站生成的图片 样式用的是 VScode 的
Ritter
2020-01-19 16:42:02 +08:00
@chenqh 已经解决了 大佬 感谢回复
Ritter
2020-01-19 16:43:35 +08:00
hehe12dyo
2020-01-19 17:21:01 +08:00
朋友 建议你一边读一边把数据往队列里面丢。这样在读大文件读时候看起来好些。
不然一个 10m 的字典,想想就刺激。
其实这工具我写过。。
cz5424
2020-01-19 17:24:31 +08:00
@ipwx 楼上根本就没看代码,手动狗头
Ritter
2020-01-19 17:27:17 +08:00
@hehe12dyo 一边读一边写我也想过 但是自带的 open 是阻塞的 上面有位大佬说的 aiofile 有空会去研究一下
p0wd3rop
2020-01-19 17:54:52 +08:00
这种扫描小工具建议用 Go 写,快,容易理解,很香。
KaynW
2020-01-20 12:15:40 +08:00
go
go
go

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/639162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX