为了账号安全,请及时绑定邮箱和手机立即绑定

python win32api阻塞瓶路线

python win32api阻塞瓶路线

ITMISS 2021-03-17 17:14:01
我有一个瓶子Web应用程序。在某个时候,我希望服务器引发一个对话框,要求服务器管理员提供某些信息。即使从a开始,此警报也会Thread阻止-我真的不明白为什么。为了查看此ctypes MessageBox是否被阻止,我尝试在一个最小的示例上在线程上运行它。我试过这个例子:import threadingfrom threading import Threadimport ctypesimport timeMessageBox = ctypes.windll.user32.MessageBoxAdef alert():    userChoice = MessageBox(0, "And this is crazy", "Hey I just met you",4)    threading.Timer(3.0,alert).start()worker = Thread(target=alert)worker.setDaemon(False)worker.start()while (True):    print("main thread is printing")    time.sleep(2)在此,主线程以2秒的间隔继续打印。同时,每3秒显示一次从线程启动的警报方法。我们清楚地看到,循环并没有等待对话框返回值。尽管进行了此测试,但是当尝试从Bottle应用程序尝试类似的代码时,除非在对话框上单击“是”或“否”,否则服务器不会响应其路由。相反,它等待对话框返回一个值,这意味着对话框在某种程度上阻止了执行。有人知道如何在不影响瓶装工作的情况下发起对话吗?我的想法不多了。感谢您的时间和精力。
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

您可能会在Bottle应用程序中使用Gevent。如果您选择monkey.patch_all(),则您的线程将变为串行线程,并会阻止执行瓶。


您不应该修补线程:


from gevent import monkey

monkey.patch_all(thread=False)


查看完整回答
反对 回复 2021-03-23
  • 1 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号