gpt4 book ai didi

python + windows 自动化 - windows 有时会出现故障

转载 作者:可可西里 更新时间:2023-11-01 10:28:55 26 4
gpt4 key购买 nike

我正在使用 Python 自动化一些 Windows 的东西,使用 PIL 截取屏幕截图等。问题是有时,在某些功能的深处,我会执行 time.sleep(1) 并且我正在连接的 GUI 应用程序会在那一秒卡住。这很奇怪,因为在其他地方执行 time.sleep 不会导致卡住。我无法确定究竟是什么导致了卡住,什么不是。它在主线程和主线程之外的线程中都发生过。

有什么想法吗?我觉得我只需要一个“冷静”功能来让 Python 停止它正在做的任何事情,让目标 UI 恢复并刷新和处理输入,然后将它带回 Python。什么功能可以做到这一点? (windows Sleep 函数看起来就像 python 的 time.sleep。)

最佳答案

I feel I just need like a "chill out" function to cause Python to stop whatever it is it's doing, let the targeted UI recover and refresh and process input, then bring it back to Python. What function would do that?

调用 sleep()(它的任何变体)将阻止您调用它的线程的执行。如果您希望在该线程中拥有响应式 UI,这只是您最不想做的事情。简单来说,一旦你睡着了,你就什么都做不了了!

当您的用户界面无响应时,这表明处理 UI 的线程中正在执行长时间运行的任务,或者 UI 线程正在阻塞。因此,为了遵循逻辑,如果您的 1 秒 sleep (它们实际上是打瞌睡而不是正常睡​​眠!)导致 UI 挂起,则它们必须发生在与 UI 相同的线程中,或者 UI 所在的线程中等待。

我真的不知道您如何使用 PIL 以及您如何与您正在抓取其图像的应用程序交互,但您似乎不太可能注入(inject)其他进程。所以我猜这个过程正在等待你的线程。如果是这样,那么解决您的问题就没有真正的捷径。你只需要花更少的时间做你正在做的事情。调用 sleep() 只会让事情变得更糟。

调用 SwitchToThread() 也无济于事。它所做的只是允许另一个线程运行(如果有一个线程正在等待并准备运行),但您希望您所在的线程运行。无论如何,这不会有太大区别,因为系统会知道您的线程想要运行,并会在适当的时候再次安排它。

底线是您在 UI 进程中运行的代码阻塞了该进程。您只需要尽快让它发生,以尽量减少干扰。

关于python + windows 自动化 - windows 有时会出现故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com