【发布时间】:2018-10-11 00:16:53
【问题描述】:
我正在尝试让线程与 Socket 网络一起工作以接受客户端。我的工作正常,但现在我发现了一个问题。
代码如下:
clients = []
def myFunction(): #Not too relevant I think
server.listen(0)
conn, addr = server.accept()
print(conn)
clients.append(conn, addr)
threading.Thread(myFunction)
threading.Thread(myFunction)
input("Hit enter to finish...")
print(clients)
现在这应该返回类似这样的内容,它在我尝试过的所有 IDE(PyCharm、Sublime 文本编辑器等)上都会这样做:
Hit enter to finish...
*2 users connect*
192.168.0.5 # this is the contents of conn
192.168.0.12
*hit enter*
192.168.0.5, 192.168.0.12
但是,在 Python 自己的 IDLE 中,线程似乎无法打印任何内容,直到我按下 Enter 键,代码完全相同,如下所示:
Hit enter to finish...
*2 users connect*
*hit enter*
192.168.0.5
192.168.0.12
192.168.0.5, 192.168.0.12
这不是我想要的,因为我的代码一旦完成就会在 Python IDLE 中运行,因此它需要在这里工作。
【问题讨论】:
-
我不认为有可能对此做任何事情。
-
如果从命令行运行代码,代码是否正常运行?
-
Megalng - 显然是这样,除非我还缺少其他东西。
-
nerak99 - 你可能在那里提供了帮助,因为它可以在命令行上完美运行,而不是通过 IDLE。现在我知道了这一点,我可能可以忍受这个问题,因为它不会影响最终结果,但我对为什么会发生这种情况很感兴趣。
-
在下面添加我的答案:IDLE 行为差异已在 CPython 跟踪器上报告为 bugs.python.org/issue39724。需要更多的调试来了解为什么 input() 的 readline 阶段会阻塞输出以及如何不这样做。
标签: python python-idle