Python 地址已在twisted中与多线程服务器一起使用
我正在尝试使用twisted用python编写一个多线程服务器。callInThread(self.task)是创建一个新线程,以便在每次客户端从服务器请求某个任务时运行task()。当客户端一个接一个地发送请求(全部通过端口53)时,一切正常,但当同时有多个请求时,它说 文件“”,第1行,处于绑定状态 socket.error:[Errno 98]地址已在使用中 我的线程有什么问题吗?一次只能使用一个端口?如果是这样,我该如何处理我的服务器上的多线程呢? 非常感谢Python 地址已在twisted中与多线程服务器一起使用,python,multithreading,twisted,Python,Multithreading,Twisted,我正在尝试使用twisted用python编写一个多线程服务器。callInThread(self.task)是创建一个新线程,以便在每次客户端从服务器请求某个任务时运行task()。当客户端一个接一个地发送请求(全部通过端口53)时,一切正常,但当同时有多个请求时,它说 文件“”,第1行,处于绑定状态 socket.error:[Errno 98]地址已在使用中 我的线程有什么问题吗?一次只能使用一个端口?如果是这样,我该如何处理我的服务器上的多线程呢? 非常感谢 class BaseThre
class BaseThreadedUDPServer(DatagramProtocol):
def datagramReceived(self, datagram, (host, port)):
print "received %r from %s:%d" % (datagram, host, port)
reactor.callInThread(self.task)
def task(a):
print "waiting on port:", csport
while 1:
## RCV QUERY ##
query, addr = csSocket.recvfrom(csbuf)
## GET ANS ##
ans = socket.gethostbyname(query)
## SEND ANS ##
scSocket.sendto(ans, scaddr)
def main():
print "main"
reactor.listenUDP(53, BaseThreadedUDPServer())
reactor.run()
你不需要线程。这是一辆可怕的马车。Twisted已经在为您调用
recv
:这是传递给datagramReceived
的结果。你自己别说了。你不需要一根线
然而,这可能与你的问题无关。53是默认的DNS端口:您遇到的问题是另一台服务器,可能是一台DNS服务器已经在该计算机上运行。尝试将53更改为其他值
但我不是很确定;以后,请粘贴完整的回溯。回溯行显然不是来自您粘贴的示例,因为第1行除了“class”语句外没有其他内容。此外,由于此代码缩进错误并引发一个SyntaxError
,因此它显然与您正在运行的代码不完全相同
假设您实际上正在使用DNS做一些事情,Twisted有自己的DNS服务器;你应该使用而不是实现你自己的DNS数据包解析。@pilu:看起来你一点也没有被扭曲。。。你不需要线程来并行处理事情,事实上你应该完全避免它们。你是什么意思?你不需要线程来运行Parralel中的东西吗?基本上:是的。但是你(一个扭曲的用户)需要线程吗?不,twisted会照顾他们。