我有一个Python客户机套接字的问题。在
我需要连接到服务器,我想:
我试着用选择。选择方法。 这是我的代码:
class ThreadCollector(threading.Thread):
def __init__(self, s, outputs):
threading.Thread.__init__(self)
self.__s = s
self.__outputs = outputs
def run(self):
global message_queues
time.sleep(12)
message_queues.put("Y")
self.__outputs.append(self.__s)
time.sleep(30)
print "Start main process"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = "XXX.XXX.XXX.XXX"
port = 999999
s.connect((address, port))
inputs = [s]
outputs = []
message_queues = Queue.Queue()
ThreadCollector(s, outputs).start()
timeout = 10
while 1 == 1:
readable, writable, exceptional = select.select(inputs, outputs, inputs, timeout)
if not (readable or writable or exceptional):
message_queues.put("T")
outputs.append(s)
else:
for socketactivated in readable:
if socketactivated is s:
input = s.recv(1)
message_queues.put(input)
outputs.append(s)
for socketactivated in writable:
if socketactivated is s:
message = message_queues.get_nowait()
s.send(messaggio)
outputs.remove(s)
print "End main process"
剧本效果很好。 如果达到超时,“T”chr将立即发送到目的地。在
但我有个问题。在
当线程将chr“Y”推送到“message_queues”并将套接字追加到输出列表时,脚本不会立即发送“Y”。它只在超时过期后发送“Y”,主脚本将“T”和套接字附加到列表中。在
只有在这次手术之后”选择。选择“醒来知道有东西要送。主脚本正确地看到输出列表包含两个套接字,消息队列两个chr(“Y”和“T”)。在
如果线程休眠,并且达到了超时,则进程正常,并且在主脚本填充“message_queues”和“outputs”之后立即发送“T”。在这种情况下,我可以看到脚本返回到选择。选择,它会立即理解输出列表有要发送的内容。在
为什么我的线不能告诉你”选择。选择“插座有东西要送吗?我能写些什么来唤醒你“选择。选择“从线上? 我能把这些信息放哪儿?在
目前没有回答
相关问题 更多 >
编程相关推荐