0

我想做一件简单的事情:只需绑定两个端口以等待传入连接并与应用程序代码连续。这是代码。

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"

我需要获取每个函数中返回的一些参数。我使用队列库来做到这一点。但问题是我想继续使用代码并且我从来没有到达这条线:打印“我从来没有到达这里”。至少它永远不会被打印出来。

在启动这两个线程并处理传入连接后,我需要如何继续开发。

非常感谢

4

1 回答 1

0

两个.get()呼叫都是阻塞呼叫。此外,.accept()您的线程中的调用是阻塞的。.accept()从技术上讲,如果没有来自客户端的连接,您甚至不应该通过这两个电话。因为主线程正在等待get()来自队列的调用,但队列从不放任何东西,因为线程正在等待接受未来的连接。

您需要做的是从线程内部而不是主线程内部处理队列。否则,您将需要.get(timeout=someSeconds)在事件循环内部使用,在该循环中您在一定时间内不断检查队列中的更多内容,然后继续进行更多连续处理。

您可能想准确解释您要实现的目标,然后在阻塞主线程接收数据之前重组这些线程以处理更多自己的工作。

于 2012-12-31T05:46:03.687 回答