我想做一件简单的事情:只需绑定两个端口以等待传入的连接,并继续使用应用程序代码。这是密码。在
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"
我需要在每个函数中返回一些参数。我使用队列库来完成。 但问题是,我想继续使用代码,而我从来没有到达过这一行:打印“我从未到达这里”。至少从来没有印刷过。在
在启动这两个线程并处理传入的连接之后,我需要怎样做才能继续开发呢。在
非常感谢
两个
.get()
调用都是阻塞调用。另外,线程中的.accept()
调用正在阻塞。从技术上讲,如果没有来自客户端的连接,您甚至不应该通过这两个.accept()
调用。因为主线程正在等待来自队列的get()
调用,但是队列从不放置任何内容,因为线程正在等待接受未来的连接。在您需要做的是从线程内部而不是主线程内部处理队列。否则,您将需要在事件循环中使用
.get(timeout=someSeconds)
,在该循环中,您将在一定时间内检查队列中的更多内容,然后继续执行更多的连续处理。在您可能需要确切地解释您要实现的目标,然后在阻塞主线程以接收数据之前,重新构造这些线程以处理更多自己的工作。在
相关问题 更多 >
编程相关推荐