提问人:ant r 提问时间:10/30/2023 更新时间:10/30/2023 访问量:27
Python 线程事件在 python 3.11.5 中未按预期工作(在 python 3.9.6 中有效)
Python Thread events not working as expected in python 3.11.5 (works in python 3.9.6)
问:
我有一个多线程客户端,其启动如下所示:
pauseEvent = threading.Event()
input = InputThread(clientSocket, username, pauseEvent)
response = ReponseThread(clientSocket, username, pauseEvent)
input.start()
response.start()
传入线程。Event() 添加到线程中,然后使用它,如下所示:
输入线程
while True:
message = input("blah blah")
socket.send(message.encode())
print("paused")
self.pauseEvent.wait()
响应线程
while True:
data = self.clientSocket.recv(2048)
response: str = data.decode()
print("\n" + response[22:])
sys.stdout.flush()
self.pauseEvent.set()
因此,除非我遗漏了 inputThread 应该在 ResponseThread 等待 recv 时等待输入的内容,否则在 stdin 中给出输入后,输入线程发送消息,然后等到响应线程接收并打印响应,然后可以“解锁”事件。之后,输入线程将重新提示。
预期流量:
- 等等等等
- { 用户输入 }
- 服务器响应
重复
电流:
- 等等等等
- { 用户输入 }
- 等等等等
- 服务器响应
- { 用户输入 }
我尝试转储粗壮的缓冲区,如sys.stdout.flush()所示,但这什么也没做。我还尝试使用 python 3.9.6(因为这是我下载的唯一其他 python 解释器),出于某种奇怪的原因,这使它按预期工作。不确定自该版本以来线程事件是否发生了重大变化。
答: 暂无答案
评论