Python twisted epollreactor是否使用非阻塞dns查找?

Python twisted epollreactor是否使用非阻塞dns查找?,python,dns,twisted,Python,Dns,Twisted,显然,它将使用TwistedNamesAPI,而不是任何解析主机名的阻塞方式。 然而在源代码中,我一直无法找到名称解析发生的位置。有人能告诉我发生主机解析的相关源代码吗(例如,当尝试执行连接TCP时)。 我真的需要确保connectTCP不会使用阻止DNS解析。我对twisted不太熟悉,我最近才开始使用它。看起来它不会阻塞,但只在支持线程的平台上 在twisted.internet.base中的ReactorBase中,它似乎通过resolve方法执行解析,该方法返回一个来自self.reso

显然,它将使用TwistedNamesAPI,而不是任何解析主机名的阻塞方式。 然而在源代码中,我一直无法找到名称解析发生的位置。有人能告诉我发生主机解析的相关源代码吗(例如,当尝试执行
连接TCP
时)。
我真的需要确保
connectTCP
不会使用阻止DNS解析。

我对
twisted
不太熟悉,我最近才开始使用它。看起来它不会阻塞,但只在支持线程的平台上

twisted.internet.base
中的
ReactorBase
中,它似乎通过
resolve
方法执行解析,该方法返回一个来自
self.resolver.getHostByName
的延迟


self.resolver
是默认情况下阻止的
blockingsolver
的实例,但是如果平台支持线程化,那么在
ReactorBase.\u initThreads
方法中,解析器实例将被
ThreadedResolver
替换。

我对
twisted
不太熟悉,我最近才开始使用它。看起来它不会阻塞,但只在支持线程的平台上

twisted.internet.base
中的
ReactorBase
中,它似乎通过
resolve
方法执行解析,该方法返回一个来自
self.resolver.getHostByName
的延迟

self.resolver
是默认情况下阻止的
blockingsolver
的一个实例,但是如果平台支持线程化,那么在
ReactorBase.\u initThreads
方法中,解析器实例将被
ThreadedResolver
替换。这似乎很明显,不是吗

不幸的是:

  • 名称解析并不总是以明显的方式进行配置。你认为你只需要阅读
    /etc/resolv.conf
    ?即使在Linux和DNS的特定情况下,也可能需要查找任意数量的文件以查找名称服务器
  • 名称解析比DNS复杂得多。您必须执行mDNS解析,可能需要查找一些LDAP计算机记录,然后必须遵守本地配置,以指示这些记录之间的顺序,例如
    /etc/nsswitch.conf
  • 名称解析不会通过标准或有用的非阻塞API公开。甚至glibc专用的也通过SIGIO公开了它的非阻塞性,而不仅仅是一个您可以查看的文件描述符。这意味着,它可能只是你背后的一个内核线程
  • 出于这些原因,Twisted默认使用只在线程中调用
    gethostbyname
    的解析器

    但是,如果您知道对于您的应用程序,仅使用DNS主机名解析是合适的,并且您希望使用
    twisted.names
    而不是您的平台解析程序-换句话说,如果规模对您来说比深奥的名称解析用例更重要,则支持这种解析。你可以从一个反应堆中选择一个,所有未来的内置名称解析都将使用该解析器进行。

    这似乎很明显,不是吗

    不幸的是:

  • 名称解析并不总是以明显的方式进行配置。你认为你只需要阅读
    /etc/resolv.conf
    ?即使在Linux和DNS的特定情况下,也可能需要查找任意数量的文件以查找名称服务器
  • 名称解析比DNS复杂得多。您必须执行mDNS解析,可能需要查找一些LDAP计算机记录,然后必须遵守本地配置,以指示这些记录之间的顺序,例如
    /etc/nsswitch.conf
  • 名称解析不会通过标准或有用的非阻塞API公开。甚至glibc专用的也通过SIGIO公开了它的非阻塞性,而不仅仅是一个您可以查看的文件描述符。这意味着,它可能只是你背后的一个内核线程
  • 出于这些原因,Twisted默认使用只在线程中调用
    gethostbyname
    的解析器


    但是,如果您知道对于您的应用程序,仅使用DNS主机名解析是合适的,并且您希望使用
    twisted.names
    而不是您的平台解析程序-换句话说,如果规模对您来说比深奥的名称解析用例更重要,则支持这种解析。您可以从一个解析器中选择一个,然后所有未来的内置名称解析都将使用该解析器进行。

    回答得很好,谢谢!我费了一段时间才明白为什么会有ThreadedResolver和twisted.names,以及它们之间的关系。很高兴向twisted docs发表以下评论:)回答得很好,谢谢!我费了一段时间才明白为什么会有ThreadedResolver和twisted.names,以及它们之间的关系。如果能向twisted docs发表以下评论,那就太好了:)