【发布时间】:2013-01-24 17:18:38
【问题描述】:
如果是这样,在什么条件下?或者,换个说法,在 twisted 中运行这段代码是否安全:
class StatsdClient(AbstractStatsdClient):
def __init__(self, host, port):
super(StatsdClient, self).__init__()
self.addr = (host, port)
self.server_hostname = socket.gethostname()
self.udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def incr(self, stat, amount=1):
data = {"%s|c" % stat: amount}
self._send(data)
def _send(self, data):
for stat, value in data.iteritems():
self.udp_sock.sendto("servers.%s.%s:%s" % (self.server_hostname, stat, value), self.addr)
【问题讨论】:
-
我相信它默认是阻塞的,你必须使用
self.udp_sock.setblocking(0)将其设置为非阻塞,在这种情况下如果它不能立即发送数据就会引发异常。