Go to the latest version of this document.

# ``twisted`.`internet`.`base`.`ReactorBase``

class documentation

`class ReactorBase(PluggableResolverMixin): (source)`

Known subclasses: `twisted.internet.iocpreactor.reactor.IOCPReactor`, `twisted.internet.posixbase.PosixReactorBase`

Implements interfaces: `twisted.internet.interfaces._ISupportsExitSignalCapturing`, `twisted.internet.interfaces.IReactorCore`, `twisted.internet.interfaces.IReactorThreads`, `twisted.internet.interfaces.IReactorTime`

View In Hierarchy

Default base class for Reactors.

Method | `__init__` | Undocumented
Method | `addReader` | Undocumented
Method | `addSystemEventTrigger` | See twisted.internet.interfaces.IReactorCore.addSystemEventTrigger.
Method | `addWriter` | Undocumented
Method | `callFromThread` | See `twisted.internet.interfaces.IReactorFromThreads.callFromThread`.
Method | `callInThread` | See `twisted.internet.interfaces.IReactorInThreads.callInThread`.
Method | `callLater` | See twisted.internet.interfaces.IReactorTime.callLater.
Method | `callWhenRunning` | See twisted.internet.interfaces.IReactorCore.callWhenRunning.
Method | `crash` | See twisted.internet.interfaces.IReactorCore.crash.
Method | `disconnectAll` | Disconnect every reader, and writer in the system.
Method | `doIteration` | Do one iteration over the readers and writers which have been added.
Method | `fireSystemEvent` | See twisted.internet.interfaces.IReactorCore.fireSystemEvent.
Method | `getDelayedCalls` | See `twisted.internet.interfaces.IReactorTime.getDelayedCalls`
Method | `getReaders` | Undocumented
Method | `getThreadPool` | See `twisted.internet.interfaces.IReactorThreads.getThreadPool`.
Method | `getWriters` | Undocumented
Method | `installWaker` | Undocumented
Method | `iterate` | See twisted.internet.interfaces.IReactorCore.iterate.
Method | `mainLoop` | Undocumented
Method | `removeAll` | Undocumented
Method | `removeReader` | Undocumented
Method | `removeSystemEventTrigger` | See twisted.internet.interfaces.IReactorCore.removeSystemEventTrigger.
Method | `removeWriter` | Undocumented
Method | `resolve` | Return a Deferred that will resolve a hostname.
Method | `run` | Fire 'startup' System Events, move the reactor to the 'running' state, then run the main loop until it is stopped with `stop()` or `crash()`.
Method | `runUntilCurrent` | Run all pending timed calls.
Method | `sigBreak` | Handle a SIGBREAK interrupt.
Method | `sigInt` | Handle a SIGINT interrupt.
Method | `sigTerm` | Handle a SIGTERM interrupt.
Method | `startRunning` | Method called when reactor starts: do some initialization and fire startup events.
Method | `stop` | See twisted.internet.interfaces.IReactorCore.stop.
Method | `suggestThreadPoolSize` | See `twisted.internet.interfaces.IReactorThreads.suggestThreadPoolSize`.
Method | `timeout` | Determine the longest time the reactor may sleep (waiting on I/O notification, perhaps) before it must wake up to service a time-related event.
Method | `wakeUp` | Wake up the event loop.
Class Variable | `__name__` | Undocumented
Class Variable | `installed` | Undocumented
Class Variable | `seconds` | Get the current time in seconds.
Instance Variable | `running` | See `IReactorCore.running`
Instance Variable | `threadCallQueue` | Undocumented
Instance Variable | `threadpool` | Undocumented
Instance Variable | `threadpoolShutdownID` | Undocumented
Instance Variable | `usingThreads` | Undocumented
Instance Variable | `waker` | Undocumented
Method | `_addInternalReader` | Add a read descriptor which is part of the implementation of the reactor itself.
Method | `_cancelCallLater` | Undocumented
Method | `_initThreadPool` | Create the threadpool accessible with callFromThread.
Method | `_initThreads` | Undocumented
Method | `_insertNewDelayedCalls` | Undocumented
Method | `_makeSignalHandling` | Get an appropriate signal handling object.
Method | `_moveCallLaterSooner` | Undocumented
Method | `_reallyStartRunning` | Method called to transition to the running state. This should happen in the during startup event trigger phase.
Method | `_removeInternalReader` | Remove a read descriptor which is part of the implementation of the reactor itself.
Method | `_signalsFactory` | Get a signal handling object that implements the basic behavior of stopping the reactor on SIGINT, SIGBREAK, and SIGTERM.
Method | `_stopThreadPool` | Stop the reactor threadpool. This method is only valid if there is currently a threadpool (created by `_initThreadPool`). It is not intended to be called directly; instead, it will be called by a shutdown trigger created in ...
Method | `_uninstallHandler` | Undocumented
Class Variable | `_lock` | Undocumented
Instance Variable | `_cancellations` | Undocumented
Instance Variable | `_eventTriggers` | Undocumented
Instance Variable | `_exitSignal` | See `_ISupportsExitSignalCapturing._exitSignal`
Instance Variable | `_installSignalHandlers` | A flag which indicates whether any signal handlers will be installed during startup. This includes handlers for SIGCHLD to monitor child processes, and SIGINT, SIGTERM, and SIGBREAK
Instance Variable | `_internalReaders` | Undocumented
Instance Variable | `_justStopped` | A flag which is true between the time `reactor.stop` is called and the time the shutdown system event is fired. This is used to determine whether that event should be fired after each iteration through the mainloop...
Instance Variable | `_newTimedCalls` | Undocumented
Instance Variable | `_pendingTimedCalls` | Undocumented
Instance Variable | `_registerAsIOThread` | A flag controlling whether the reactor will register the thread it is running in as the I/O thread when it starts. If `True`, registration will be done, otherwise it will not be.
Instance Variable | `_signals` | An object which knows how to install and uninstall the reactor's signal-handling behavior.
Instance Variable | `_started` | A flag which is true from the time `reactor.run` is called until the time `reactor.run` returns. This is used to prevent calls to `reactor.run` on a running reactor. This should be replaced with an explicit state machine.
Instance Variable | `_startedBefore` | Undocumented
Instance Variable | `_stopped` | A flag which is true between paired calls to `reactor.run` and `reactor.stop`. This should be replaced with an explicit state machine.
Instance Variable | `_threadpoolStartupID` | Undocumented

Inherited from `PluggableResolverMixin`:

Method | `installNameResolver` | See `IReactorPluggableNameResolver`.
Method | `installResolver` | See `IReactorPluggableResolver`.
Instance Variable | `resolver` | The installed `IResolverSimple`.
Property | `nameResolver` | Implementation of read-only `IReactorPluggableNameResolver.nameResolver`.
Instance Variable | `_nameResolver` | The installed `IHostnameResolver`.

def __init__(self): (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.iocpreactor.reactor.IOCPReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def addReader(self, reader: `IReadDescriptor`): (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def addSystemEventTrigger(self, phase: `str`, eventType: `str`, callable: `Callable[..., Any]`, *args: `object`, **kwargs: `object`) -> `_SystemEventID`: (source)
from `twisted.internet.interfaces.IReactorCore`

See twisted.internet.interfaces.IReactorCore.addSystemEventTrigger.

def addWriter(self, writer: `IWriteDescriptor`): (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def callFromThread(self, f: `Callable[..., Any]`, *args: `object`, **kwargs: `object`): (source)
from `twisted.internet.interfaces.IReactorFromThreads`
overridden in `twisted.internet.asyncioreactor.AsyncioSelectorReactor`

See `twisted.internet.interfaces.IReactorFromThreads.callFromThread`.

def callInThread(self, _callable: `Callable[..., Any]`, *args: `object`, **kwargs: `object`): (source)
from `twisted.internet.interfaces.IReactorInThreads`

See `twisted.internet.interfaces.IReactorInThreads.callInThread`.

def callLater(self, delay: `float`, callable: `Callable[..., Any]`, *args: `object`, **kw: `object`) -> `DelayedCall`: (source)
from `twisted.internet.interfaces.IReactorTime`
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`

See twisted.internet.interfaces.IReactorTime.callLater.

def callWhenRunning(self, callable: `Callable[..., Any]`, *args: `object`, **kwargs: `object`) -> `_SystemEventID | None`: (source)
from `twisted.internet.interfaces.IReactorCore`

See twisted.internet.interfaces.IReactorCore.callWhenRunning.

def crash(self): (source)
from `twisted.internet.interfaces.IReactorCore`
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`

See twisted.internet.interfaces.IReactorCore.crash.

Reset reactor state tracking attributes and re-initialize certain state-transition helpers which were set up in `__init__` but later destroyed (through use).

def disconnectAll(self): (source)

Disconnect every reader, and writer in the system.

def doIteration(self, delay: `float | None`): (source)
overridden in `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.iocpreactor.reactor.IOCPReactor`

Do one iteration over the readers and writers which have been added.

def fireSystemEvent(self, eventType: `str`): (source)
from `twisted.internet.interfaces.IReactorCore`

See twisted.internet.interfaces.IReactorCore.fireSystemEvent.

def getDelayedCalls(self) -> `Sequence[IDelayedCall]`: (source)
from `twisted.internet.interfaces.IReactorTime`

See `twisted.internet.interfaces.IReactorTime.getDelayedCalls`

def getReaders(self) -> `list[IReadDescriptor]`: (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def getThreadPool(self) -> `ThreadPool`: (source)
from `twisted.internet.interfaces.IReactorThreads`

See `twisted.internet.interfaces.IReactorThreads.getThreadPool`.

def getWriters(self) -> `list[IWriteDescriptor]`: (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def installWaker(self): (source)
overridden in `twisted.internet.iocpreactor.reactor.IOCPReactor`, `twisted.internet.posixbase.PosixReactorBase`

Undocumented

def iterate(self, delay: `float` = 0.0): (source)
from `twisted.internet.interfaces.IReactorCore`
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`

See twisted.internet.interfaces.IReactorCore.iterate.

def mainLoop(self): (source)
overridden in `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.cfreactor.CFReactor`

Undocumented

def removeAll(self) -> `list[IReadDescriptor | IWriteDescriptor]`: (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.iocpreactor.reactor.IOCPReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def removeReader(self, reader: `IReadDescriptor`): (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def removeSystemEventTrigger(self, triggerID: `_SystemEventID`): (source)
from `twisted.internet.interfaces.IReactorCore`

See twisted.internet.interfaces.IReactorCore.removeSystemEventTrigger.

def removeWriter(self, writer: `IWriteDescriptor`): (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`, `twisted.internet.epollreactor.EPollReactor`, `twisted.internet.kqreactor.KQueueReactor`, `twisted.internet.pollreactor.PollReactor`, `twisted.internet.selectreactor.SelectReactor`, `twisted.internet.win32eventreactor.Win32Reactor`

Undocumented

def resolve(self, name: `str`, timeout: `Sequence[int]` = (1, 3, 11, 45)) -> `Deferred[str]`: (source)
from `twisted.internet.interfaces.IReactorCore`

Return a Deferred that will resolve a hostname.

def run(self, installSignalHandlers: `bool` = True): (source)
from `twisted.internet.interfaces.IReactorCore`
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.wxreactor.WxReactor`

Fire 'startup' System Events, move the reactor to the 'running' state, then run the main loop until it is stopped with `stop()` or `crash()`.

def runUntilCurrent(self): (source)

Run all pending timed calls.

def sigBreak(self, number: `int`, frame: `FrameType | None` = None): (source)

Handle a SIGBREAK interrupt.

Parameters
number:`int` | See handler specification in `signal.signal`
frame:`FrameType | None` | See handler specification in `signal.signal`

def sigInt(self, number: `int`, frame: `FrameType | None` = None): (source)

Handle a SIGINT interrupt.

Parameters
number:`int` | See handler specification in `signal.signal`
frame:`FrameType | None` | See handler specification in `signal.signal`

def sigTerm(self, number: `int`, frame: `FrameType | None` = None): (source)

Handle a SIGTERM interrupt.

Parameters
number:`int` | See handler specification in `signal.signal`
frame:`FrameType | None` | See handler specification in `signal.signal`

def startRunning(self, installSignalHandlers: `bool` = True): (source)
overridden in `twisted.internet.cfreactor.CFReactor`

Method called when reactor starts: do some initialization and fire startup events.

Don't call this directly, call reactor.run() instead: it should take care of calling this.

This method is somewhat misnamed. The reactor will not necessarily be in the running state by the time this method returns. The only guarantee is that it will be on its way to the running state.

Parameters
installSignalHandlers:`bool` | A flag which, if set, indicates that handlers for a number of (implementation-defined) signals should be installed during startup.

def stop(self): (source)
from `twisted.internet.interfaces.IReactorCore`
overridden in `twisted.internet._glibbase.GlibReactorBase`, `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`

See twisted.internet.interfaces.IReactorCore.stop.

def suggestThreadPoolSize(self, size: `int`): (source)
from `twisted.internet.interfaces.IReactorThreads`

See `twisted.internet.interfaces.IReactorThreads.suggestThreadPoolSize`.

def timeout(self) -> `float | None`: (source)

Determine the longest time the reactor may sleep (waiting on I/O notification, perhaps) before it must wake up to service a time-related event.

Returns
`float | None` | The maximum number of seconds the reactor may sleep.

def wakeUp(self): (source)
overridden in `twisted.internet._threadedselect.ThreadedSelectReactor`, `twisted.internet.iocpreactor.reactor.IOCPReactor`

Wake up the event loop.

__name__: `str` = (source)

Undocumented

installed: `bool` = (source)

Undocumented

seconds = (source)
from `twisted.internet.interfaces.IReactorTime`

Get the current time in seconds.

Returns
A number-like object of some sort.

running: `bool` = (source)
from `twisted.internet.interfaces.IReactorCore`

See `IReactorCore.running`

threadCallQueue: `list[_ThreadCall]` = (source)

Undocumented

threadpool = (source)

Undocumented

threadpoolShutdownID = (source)

Undocumented

usingThreads: `bool` = (source)

Undocumented

waker: `Any` = (source)
overridden in `twisted.internet.posixbase.PosixReactorBase`

Undocumented

def _addInternalReader(self, reader: `IReadDescriptor`): (source)

Add a read descriptor which is part of the implementation of the reactor itself.

The read descriptor will not be removed by `IReactorFDSet.removeAll`.

def _cancelCallLater(self, delayedCall: `DelayedCall`): (source)

Undocumented

def _initThreadPool(self): (source)

Create the threadpool accessible with callFromThread.

def _initThreads(self): (source)

Undocumented

def _insertNewDelayedCalls(self): (source)

Undocumented

def _makeSignalHandling(self, installSignalHandlers: `bool`) -> `SignalHandling`: (source)

Get an appropriate signal handling object.

Parameters
installSignalHandlers:`bool` | Indicate whether to even try to do any signal handling. If `False` then the result will be a no-op implementation.

Returns
`SignalHandling` | Undocumented

def _moveCallLaterSooner(self, delayedCall: `DelayedCall`): (source)
overridden in `twisted.internet.asyncioreactor.AsyncioSelectorReactor`, `twisted.internet.cfreactor.CFReactor`

Undocumented

def _reallyStartRunning(self): (source)
overridden in `twisted.internet._glibbase.GlibReactorBase`

Method called to transition to the running state. This should happen in the during startup event trigger phase.

def _removeInternalReader(self, reader: `IReadDescriptor`): (source)

Remove a read descriptor which is part of the implementation of the reactor itself.

def _signalsFactory(self) -> `SignalHandling`: (source)
overridden in `twisted.internet.posixbase.PosixReactorBase`

Get a signal handling object that implements the basic behavior of stopping the reactor on SIGINT, SIGBREAK, and SIGTERM.

def _stopThreadPool(self): (source)

Stop the reactor threadpool. This method is only valid if there is currently a threadpool (created by `_initThreadPool`). It is not intended to be called directly; instead, it will be called by a shutdown trigger created in `_initThreadPool`.

def _uninstallHandler(self): (source)
overridden in `twisted.internet._threadedselect.ThreadedSelectReactor`

Undocumented

_lock = (source)

Undocumented

_cancellations: `int` = (source)

Undocumented

_eventTriggers: `dict[str, _ThreePhaseEvent]` = (source)

Undocumented

_exitSignal = (source)
from `twisted.internet.interfaces._ISupportsExitSignalCapturing`

See `_ISupportsExitSignalCapturing._exitSignal`

_installSignalHandlers: `bool` = (source)

A flag which indicates whether any signal handlers will be installed during startup. This includes handlers for SIGCHLD to monitor child processes, and SIGINT, SIGTERM, and SIGBREAK

_internalReaders: `set[Any]` = (source)

Undocumented

_justStopped: `bool` = (source)
overridden in `twisted.internet.asyncioreactor.AsyncioSelectorReactor`

A flag which is true between the time `reactor.stop` is called and the time the shutdown system event is fired. This is used to determine whether that event should be fired after each iteration through the mainloop. This should be replaced with an explicit state machine.

_newTimedCalls: `list[DelayedCall]` = (source)

Undocumented

_pendingTimedCalls: `list[DelayedCall]` = (source)

Undocumented

_registerAsIOThread: `bool` = (source)

A flag controlling whether the reactor will register the thread it is running in as the I/O thread when it starts. If `True`, registration will be done, otherwise it will not be.

_signals: `SignalHandling` = (source)

An object which knows how to install and uninstall the reactor's signal-handling behavior.

_started: `bool` = (source)
overridden in `twisted.internet.cfreactor.CFReactor`

A flag which is true from the time `reactor.run` is called until the time `reactor.run` returns. This is used to prevent calls to `reactor.run` on a running reactor. This should be replaced with an explicit state machine.

_startedBefore: `bool` = (source)

Undocumented

_stopped: `bool` = (source)

A flag which is true between paired calls to `reactor.run` and `reactor.stop`. This should be replaced with an explicit state machine.

_threadpoolStartupID = (source)

Undocumented