【发布时间】:2016-08-04 09:06:23
【问题描述】:
我有一个多线程 Python 3 应用程序,它在线程 #1 上接受 TCP 套接字通信。线程 #2 将检查所有当前连接是否有任何要接收的内容,然后采取相应措施。
所以,目前我有一个名为all_connections 的列表,它是一个接受的套接字连接对象的列表。
使用for connection in all_connections: 我可以遍历所有连接对象。我知道我使用conn.recv(256) 来检查是否有任何东西可以在这个套接字上接收。这会阻塞循环,直到有东西要接收?我事先设置了conn.setblocking(1),尽管我不确定这是否是解决它的最佳方法:
下面是一些示例代码:
线程 1
self.all_connections = [] # init a list to hold connection objs
while 1:
try:
conn, address = self.socket.accept()
conn.setblocking(1) # non blocking
except Exception as e:
continue
self.all_connections.append(conn) # Save the connection object
线程 2
while True:
for connection in self.all_connections:
received = connection.recv(256)
return
所以,我只对实际发送了一些东西的连接感兴趣,因为我很可能会向他们发送一些东西。
我知道我可以使用select.select 来检查套接字上是否有要接收的内容,但这无助于我参考具体的连接。
【问题讨论】:
标签: python multithreading sockets tcp