使用两个端口进行Python 3线程处理

时间:2015-12-01 16:35:32

标签: python multithreading python-3.x

我正在研究一个基本的python程序,以便习惯于线程化和网络化,而且我在代码的一个部分已经变得有点不知名了。

我拥有的是:

#make a socket and loop to obtain connections 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ads = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(("127.0.0.1" , 4000))
ads.bind(("127.0.0.1" , 4001))

s.listen(10)
ads.listen(1)

socks = [s,ads]
connections = [] # list of connections 

while True:
    if ads:
        (c,a) = ads.accept()
        t = threading.Thread(target = admin_client, args = ())
        t.start()
    elif :   
        (c,a) = s.accept()
        connections.append(c)
        t = threading.Thread(target = handle_client, args = (c,a))
        t.start()

我希望发生的是当广告端口被访问时,它会将其分配给它似乎执行的admin_client方法,但如果在端口上连接任何东西,它将不会做任何事情。

有没有人有这方面的解决方案,所以两个客户端都会连接没有问题?

1 个答案:

答案 0 :(得分:1)

if ads:始终为True。您需要使用select。由于if ads:始终为True,因此您需要等待有人连接到广告端口的(c,a) = ads.accept()

像(未经测试)的东西:

r,w,x = select.select(socks,[],[])
if ads in r:
     ...
elif s in r:
     ...