【发布时间】:2010-12-06 13:12:53
【问题描述】:
我正在尝试使用 twisted 在 python 中编写多线程服务器。 callInThread(self.task) 是在客户端每次向服务器请求某事时创建一个新线程来运行 task()。当客户端一个一个发送请求时(全部通过端口53),一切正常,但是当同时有多个请求时,它说
文件“”,第 1 行,在绑定中 socket.error: [Errno 98] 地址已在使用中
我的线程有问题吗,一次只能使用一个端口?如果是这样,我应该如何处理我的服务器的多线程? 非常感谢!
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()
【问题讨论】:
-
@pilu: 好像你根本没有被扭曲......你不需要线程来并行做事,事实上你应该完全避免它们。
-
什么意思?你不需要线程来并行运行吗?
-
基本上:是的。但是你(一个扭曲的用户)需要线程吗?不,twisted 会照顾他们。
标签: python multithreading twisted