python - 写入 UDP 套接字是否会阻塞?

标签 python udp twisted statsd

如果是,在什么条件下?或者,换句话说,在扭曲的内部运行这段代码是否安全:

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)

最佳答案

是的,奇怪的是,UDP 套接字可以阻塞。

发生这种情况的条件基本上是,某处的一些缓冲区已满,您的操作系统决定是时候阻止某些东西了。这些可以说是内核错误,但我到处都看到过它们。有时在模糊的、无法重现的条件下,您肯定会得到 EWOULDBLOCK

为什么要在 Twisted 中执行此操作而不是使用 Twisted 的 built-in UDP support虽然?

关于python - 写入 UDP 套接字是否会阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507028/

相关文章:

python - CSRF token 丢失或不正确 - Django

python - SQLAlchemy - 获取表的创建日期

java - 无法通过 UDP protobuf 将大于 127 的整数值从 C++ 发送到 Java

ruby - 如何在 ruby​​ 中执行 TOS/DSCP?

Python 类之间的异步通信

python - 带括号的正则表达式前瞻

python - 如何在Python中列出以 "2019_03"开头且扩展名 ".text"的文件

java - Java的DatagramChannel.write()的含义

Python Twisted : SSL routines , ssl3_get_server_certificate 错误

python - 集群 TCP 服务器,因此可以向所有客户端发送数据