V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ipwx  ›  全部回复第 87 页 / 共 194 页
回复总数  3876
1 ... 83  84  85  86  87  88  89  90  91  92 ... 194  
@no1xsyzy 对呀,我上面的基本看法也是两个线程呀。我从来不觉得 GUI 用协程搞是好主意啊。
@no1xsyzy 我感觉吧,楼主这只是个 demo 。

GUI 调用协程是有实际价值的。譬如你用 requests,用线程池做下载器,并发才多少。用上 aiohttp,并发一下子暴涨。你只需要用 asyncio 的 queue (那个是线程安全的好像)把 task 塞进 asyncio 里面,最后在主线程通过 event 把结果弄回来就行了。
@no1xsyzy

1 、独占线程和 GIL 锁没有任何关系。一个 C 语言写的线程完全可以进入 while 之前释放 GIL 锁,在调用任何 python 函数之前获取 GIL 锁。tk 的 mainloop 是 C 模块。

搜了一下: https://github.com/python/cpython/blob/master/Modules/_tkinter.c#L2861

对于等待。确实 GUI 一般不是忙等待。像 Windows API 是调用操作系统的 API 获取下一个 event,而操作系统内部必然有队列,不是忙等待。比如

Windows: https://docs.microsoft.com/en-us/windows/win32/learnwin32/window-messages
xlib: http://mech.math.msu.su/~nap/2/GWindow/xintro.html

mac 没了解过,不过大概差不多,不然很难想象 Qt 那种库该怎么写,因为从上到下都充斥着 event-loop 的味道(比如别的线程要更新界面必须发送一个消息到 GUI 主线程)。所以你见过的不是 event loop 的 GUI 库(比如 Qt )大部分情况下只是给你把操作系统的 eventloop 包装了一下而已。
@ppgs8903 你在说啥?完全牛头不对马嘴吧。。。

@Nich0la5 在 GUI 程序里面用 aio eventloop 没啥问题吧,用啥不能用。关键是楼主用错了。

- - - -

@gzlock

要理解 aio,其实最好去看一看 select/epoll 的资料。Python 的 async 语法只是一堆语法糖,本质就是让人写 eventloop 程序更容易。然后 GUI 又是一个典型的 eventloop,有兴趣可以看看 Windows API 写 GUI 的那套,或者看看 Qt 源代码。但不管是什么类型的 eventloop,都需要有一个 while loop 来 receive event -> process event 。

既然有两个 eventloop,那么自然需要两个线程去各自跑这两个 eventloop 。

asyncio.run() 就是跑那么一个 loop,内部我虽然没看过代码,但本质肯定等价于一个 while loop,直到所有协程跑完再退出。如果你在 gui 的 main thread 里面跑,就相当于阻塞了 gui 的 eventloop 。
aio eventloop 需要独占一个线程,GUI 也需要独占一个线程。所以你永远需要至少两个线程。
这种话在大部分码农工作的语境下都是鸡汤。码农工作学到的东西基本上五年以后就没用了不是么。
2020-05-20 10:13:58 +08:00
回复了 pushback 创建的主题 MySQL [外键应不应该建立]
感觉楼上有部分人是鸡同鸭讲。

有一部分回复是支持“在恰当的场景下使用外键”,前提条件是需求明确。

另一部分人的口吻是“弊大于利不用”。但实际上主张弊大于利的,我感受了一下,其实有个前提条件,是一开始的需求没那么明确,还要充分迭代开发,导致后面原先的外键变成了累赘。

你们两拨人根本讨论问题的前提条件就不一样好吧。
??? 企业家的价值观难道不是赚钱嘛?
2020-05-16 22:01:19 +08:00
回复了 walkbox 创建的主题 Android 上个月底咸鱼收了小米 cc9 从此踏上了刷机的不归路,好累
MNIUI 养老中
加密分区或者虚拟分区的软件大把的有。比如把一个文件当做硬盘 TrueCrypt,或者直接加密整个分区 Windows 自带的 BitLocker 。
2020-05-16 10:35:26 +08:00
回复了 en20 创建的主题 程序员 问一下后端的同学为何你们传参都喜欢 int 1234
前端无论如何都应该自己翻译后端过来的名字。。。
2020-05-16 10:35:06 +08:00
回复了 en20 创建的主题 程序员 问一下后端的同学为何你们传参都喜欢 int 1234
@ilaipi 骚年,这个名字(我假设是英文或者拼音)只是为了取代数字枚举,让开发人员开发的时候不至于每次都要查手册。本质还是个枚举,不能直接显示的。。。 就像 @binux 说的那样。
2020-05-15 21:57:57 +08:00
回复了 cpper 创建的主题 Apple 为什么 apple 可以把 mbp 的触摸板做的这么好
错字受石锤
2020-05-15 11:42:52 +08:00
回复了 en20 创建的主题 程序员 问一下后端的同学为何你们传参都喜欢 int 1234
@Dogergo 都只是个代号,电商改名字你并不需要改常量啊。。。这么大的电商,就算改个名字,叫老名字十年内大家都还记得的吧。
1 ... 83  84  85  86  87  88  89  90  91  92 ... 194  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1458 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 51ms · UTC 17:28 · PVG 01:28 · LAX 10:28 · JFK 13:28
Developed with CodeLauncher
♥ Do have faith in what you're doing.