我想做一件简单的事情:只需绑定两个端口以等待传入连接并继续使用应用程序代码。这是代码。
import socket
import threading
import Queue
q = Queue.Queue()
q2 = Queue.Queue()
def escucha_9003():
s = socket.socket()
s.bind(("localhost",9023))
s.listen(10)
sc, address = s.accept()
q.put(sc)
def escucha_9004():
s2 = socket.socket()
s2.bind(("localhost",9024))
s2.listen(10)
sc2, address2 = s2.accept()
q.put(sc2)
hilo = threading.Thread(target=escucha_9003).start()
sc2=q.get()
hilo2 = threading.Thread(target=escucha_9004).start()
sc=q2.get()
print "i never arrive here"
我需要获取每个函数中返回的一些参数。我使用Queue库来做到这一点。 但问题是我想继续使用代码而且我从未到过这条线:打印“我永远不会到达这里”。至少它永远不会打印出来。
如何在启动这两个线程后继续开发并使用传入连接。
非常感谢
答案 0 :(得分:0)
两个.get()
来电都是阻止来电。此外,您的线程中的.accept()
调用是阻塞的。从技术上讲,如果没有来自客户端的连接,你甚至不应该通过两个.accept()
调用。因为主线程正在等待来自队列的get()
调用,但是队列从不放置任何东西,因为线程正在等待接受未来的连接。
您需要做的是从线程内部而不是在主线程内部处理队列。否则,您需要在事件循环中使用.get(timeout=someSeconds)
,在那里您将在队列中检查更多内容一段时间,然后继续进行更多的连续处理。
您可能想要准确解释您要实现的目标,然后重新构造这些线程以在阻止主线程接收数据之前处理更多自己的工作。