|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # -*- test-case-name: twisted.internet.test.test_default -*-
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
-
- """
- The most suitable default reactor for the current platform.
-
- Depending on a specific application's needs, some other reactor may in
- fact be better.
- """
-
-
- __all__ = ["install"]
-
- from twisted.python.runtime import platform
-
-
- def _getInstallFunction(platform):
- """
- Return a function to install the reactor most suited for the given platform.
-
- @param platform: The platform for which to select a reactor.
- @type platform: L{twisted.python.runtime.Platform}
-
- @return: A zero-argument callable which will install the selected
- reactor.
- """
- # Linux: epoll(7) is the default, since it scales well.
- #
- # macOS: poll(2) is not exposed by Python because it doesn't support all
- # file descriptors (in particular, lack of PTY support is a problem) --
- # see <http://bugs.python.org/issue5154>. kqueue has the same restrictions
- # as poll(2) as far PTY support goes.
- #
- # Windows: IOCP should eventually be default, but still has some serious
- # bugs, e.g. <http://twistedmatrix.com/trac/ticket/4667>.
- #
- # We therefore choose epoll(7) on Linux, poll(2) on other non-macOS POSIX
- # platforms, and select(2) everywhere else.
- try:
- if platform.isLinux():
- try:
- from twisted.internet.epollreactor import install
- except ImportError:
- from twisted.internet.pollreactor import install
- elif platform.getType() == "posix" and not platform.isMacOSX():
- from twisted.internet.pollreactor import install
- else:
- from twisted.internet.selectreactor import install
- except ImportError:
- from twisted.internet.selectreactor import install
- return install
-
-
- install = _getInstallFunction(platform)
|