线程化python绑定多个端口

2024-06-11 08:18:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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"

我需要在每个函数中返回一些参数。我使用队列库来完成。 但问题是,我想继续使用代码,而我从来没有到达过这一行:打印“我从未到达这里”。至少从来没有印刷过。在

在启动这两个线程并处理传入的连接之后,我需要怎样做才能继续开发呢。在

非常感谢


Tags: importlocalhostqueueputbinddefsocketlisten
1条回答
网友
1楼 · 发布于 2024-06-11 08:18:56

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

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

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

相关问题 更多 >