gpt4 book ai didi

python win32api阻塞 Bottle 路线

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:02 25 4
gpt4 key购买 nike

我有一个 Bottle 网络应用程序。在某些时候,我希望服务器弹出一个对话框窗口来向服务器管理员询问一些事情。即使从 Thread 启动,此警报也会阻塞 - 我真的不明白为什么。

为了查看此 ctypes MessageBox 是否阻塞,我尝试在一个最小示例的线程上运行它。我已经尝试过这个例子:

import threading
from threading import Thread
import ctypes
import time
MessageBox = ctypes.windll.user32.MessageBoxA

def 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 应用程序中的类似代码时,直到在对话框上单击"is"或“否”为止,服务器都不会响应其路由。相反,它等待对话框返回一个值,这意味着对话框在某种程度上阻塞执行。

有人知道如何在不干扰 Bottle 工作的情况下提出对话吗?我已经没有主意了。感谢您投入的时间和精力。


更新:
这不是问题。 Bottle 确实在这个示例中运行,没有受到干扰。实际问题在这里有更好的描述:bottle gevent and threading: gevent is only usable from a single thread

最佳答案

您可能将 Gevent 与您的 Bottle 应用程序一起使用。如果您使用monkey.patch_all(),您的线程将变为串行,并且将阻止 Bottle 执行。

你不应该修补你的线程:

from gevent import monkey
monkey.patch_all(thread=False)

关于python win32api阻塞 Bottle 路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505586/

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