0145睡到0818,醒来莫名其妙的困,像是做了什么梦,但完全想不起来梦的内容。
直接kill process不会因为keyborad库卡输入,单独sys.exit(0)
却会,为什么。
keyboard
库安装了全局钩子(hook),而sys.exit()
只是退出当前线程/解释器流程,不会清理掉钩子线程。而你用「直接 kill 进程」时,操作系统会强制终止所有线程,包括
keyboard
的后台监听线程。
项目 | sys.exit(0) | os._exit(0) |
---|---|---|
实现方式 | 抛出 SystemExit 异常 | 直接调用系统底层的 _exit() 系统调用 |
清理行为 | 执行 try/finally 、atexit 、缓冲区刷新等 | ❌ 什么都不做,直接终止 |
子线程 | 不会强杀子线程 | 会立即杀死所有线程 |
文件/IO | 会刷新并关闭文件缓冲 | ❌ 缓冲区丢失,文件可能不完整 |
推荐场景 | 程序正常退出 | 异常、崩溃、子进程立即退出等情况 |
但其实小脚本直接随意使用os._exit(0)
似乎也不会有什么大问题。
看笑傲江湖发现岳不群他老婆称呼他为师兄
,感觉好有情趣呀。
使用ffmpeg -i input.mp4 -vn -acodec libmp3lame -ab 192k output.mp3
结果output音频的体积比input视频的体积还更大。看到别人可以直接改后缀把mp4变成mp3,为什么,和前者有什么区别。
体积大是因为比特率高;改后缀只是欺骗欺骗播放器。
前几天看到几年前的科技爱好者周刊看到有把ffmpeg写成py库的,避免了各种奇怪参数记不住的问题,但现在问LLM似乎是更方便的实践。
在Tkinter
UI 的回调中执行asyncio.run(controller.switch_line(line, place))
,必定失败或卡死。
asyncio.run()
不能嵌套在已有事件循环中调用,否则会卡死或直接不执行。Tkinter 的
mainloop()
本身就相当于一个阻塞事件循环。Python 官方文档明确指出:
You cannot call
asyncio.run()
from a running event loop.It must be the main entry point of the program.
包进线程就好了。也可以自己维护一个统一的事件循环。
星痕共鸣的网页签到有幽默bug,它本是购买礼包解锁下一个奖励,结果最后一天的10元红包逻辑似乎写反了,买礼包的无法领取,没买礼包的反而能领;qq群和游戏聊天都炸了,很好笑,特别在它游戏第二赛季延期产能低下的现在。
很想截图,游戏里大家疯狂刷收获满满
的表情包,qq群里也火速出现各种名场面真的很难压住嘴角。但不得不说我这博客上传图片太麻烦了,上传到图床+我记不住的图片代码格式,懒得上传了,有机会补链接了。
唉不管了,在这种大节奏多看社群也不会有什么收获,上床享受入睡前的玩手机吧。