我正在使用 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/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是: