【发布时间】:2018-02-05 01:43:44
【问题描述】:
最近,在厌倦了python之后,我决定开始学习python中的socket编程。它进展顺利,我能够建立 TCP 连接。
后来我开始在代码中添加 GUI 以使其更好。问题是当我调用函数 s.listen() 时,整个代码会暂停,直到客户端连接,这对于我的 GUI 模块(Pygame)来说是不可接受的,因为它会导致延迟并破坏我的事件处理循环。所以我想知道是否有其他方法可以在不暂停整个循环的情况下检查客户端是否连接到我的服务器。
我确实尝试过多线程:
#Wait for Connection then accept
Connection = False
def a():
global Connection
text = 'waiting for connection'
while Connection==False:
print(text)
time.sleep(1)
if text == 'waiting for connection...':
text = 'waiting for connection'
else:
text = text+'.'
def b():
global Connection
s.listen(1)
print("con")
Connection=True
WaitScreen = threading.Thread(target=a)
WaitClient = threading.Thread(target=b)
WaitScreen.start()
WaitClient.start()
但无济于事。
如果您有任何想法,请告诉我。 Stack Overflow 这里是我最后的手段。我浏览了所有的谷歌和我拥有的每一本书。也许是一个在客户端尝试连接时只返回 true 的函数,而不是暂停整个代码。任何事情都将不胜感激。
提前谢谢你
【问题讨论】:
-
是的,有可能,您可以使用套接字和非阻塞套接字选项并选择函数:请参阅此处的非阻塞套接字:docs.python.org/2/howto/sockets.html David Beazley 还在这里介绍了有趣的概念:youtube.com/watch?v=MCs5OvhV9S4
标签: python multithreading sockets tcp