Go to the latest version of this document.
search in docstrings

Search bar offers the following options:

- Term presence. The below example searches for documents that must contain “foo”, might contain “bar” and must not contain “baz”: `+foo bar -baz`
- Wildcards. The below example searches for documents with words beginning with “foo”: `foo*`
- Search in specific fields. The following search matches all objects in "twisted.mail" that matches “search”: `+qname:twisted.mail.* +search`

  Possible fields: 'name', 'qname' (fully qualified name), 'docstring', and 'kind'. Last two fields are only applicable if "search in docstrings" is enabled.

- Fuzzy matches. The following search matches all documents that have a word within 1 edit distance of “foo”: `foo~1`

Results provided by Lunr.js

# ``twisted`.`internet`.`cfreactor`.`CFReactor``

class documentation

`class CFReactor(PosixReactorBase): (source)`

Constructor: `CFReactor(runLoop, runner)`

Implements interfaces: `twisted.internet.interfaces.IReactorFDSet`

View In Hierarchy

The CoreFoundation reactor.

You probably want to use this via the `install` API.

Method | `__init__` | Undocumented
Method | `addReader` | Implement `IReactorFDSet.addReader`.
Method | `addWriter` | Implement `IReactorFDSet.addWriter`.
Method | `callLater` | Implement `IReactorTime.callLater`.
Method | `crash` | Implement `IReactorCore.crash`
Method | `getReaders` | Implement `IReactorFDSet.getReaders`.
Method | `getWriters` | Implement `IReactorFDSet.getWriters`.
Method | `iterate` | Emulate the behavior of `iterate()` for things that want to call it, by letting the loop run for a little while and then scheduling a timed call to exit it.
Method | `mainLoop` | Run the runner (`CFRunLoopRun` or something that calls it), which runs the run loop until `crash()` is called.
Method | `removeAll` | Implement `IReactorFDSet.removeAll`.
Method | `removeReader` | Implement `IReactorFDSet.removeReader`.
Method | `removeWriter` | Implement `IReactorFDSet.removeWriter`.
Method | `startRunning` | Start running the reactor, then kick off the timer that advances Twisted's clock to keep pace with CFRunLoop's.
Method | `stop` | Implement `IReactorCore.stop`.
Method | `_flag2idx` | Convert a `kCFSocket...` constant to an index into the read/write state list (`_READ` or `_WRITE`) (the 4th element of the value of `self._fdmap`).
Method | `_moveCallLaterSooner` | Override `PosixReactorBase`'s implementation of `IDelayedCall.reset` so that it will immediately reschedule. Normally `_moveCallLaterSooner` depends on the fact that `runUntilCurrent` is always run before the mainloop goes back to sleep, so this forces it to immediately recompute how long the loop needs to stay asleep.
Method | `_scheduleSimulate` | Schedule a call to `self.runUntilCurrent`. This will cancel the currently scheduled call if it is already scheduled.
Method | `_socketCallback` | The socket callback issued by CFRunLoop. This will issue `doRead` or `doWrite` calls to the `IReadDescriptor` and `IWriteDescriptor` registered with the file descriptor that we are being notified of.
Method | `_stopSimulating` | If we have a CFRunLoopTimer registered with the CFRunLoop, invalidate it and set it to None.
Method | `_unwatchFD` | Unregister a file descriptor with the `CFRunLoop`, or modify its state so that it's listening for only one notification (read or write) as opposed to both; used to implement `removeReader` and `removeWriter`...
Method | `_wakerFactory` | Undocumented
Method | `_watchFD` | Register a file descriptor with the `CFRunLoop`, or modify its state so that it's listening for both notifications (read and write) rather than just one; used to implement `addReader` and `addWriter`.
Instance Variable | `_cfrunloop` | the `CFRunLoop` pyobjc object wrapped by this reactor.
Instance Variable | `_currentSimulator` | if a CFTimer is currently scheduled with the CF run loop to run Twisted callLater calls, this is a reference to it. Otherwise, it is `None`
Instance Variable | `_fdmap` | a dictionary, mapping an integer (a file descriptor) to a 4-tuple of:
Instance Variable | `_idmap` | a dictionary, mapping the id() of an `IReadDescriptor` or `IWriteDescriptor` to a `fd` in `_fdmap`. Implemented in this manner so that we don't have to rely (even more) on the hashability of `IReadDescriptor` providers, and we know that they won't be collected since these are kept in sync with ...
Instance Variable | `_inCFLoop` | Is `CFRunLoopRun` currently running?
Instance Variable | `_runner` | Undocumented
Instance Variable | `_started` | Undocumented

Inherited from `PosixReactorBase`:

Method | `adoptDatagramPort` | Add an existing listening SOCK_DGRAM socket to the reactor to monitor for read and write readiness.
Method | `adoptStreamConnection` | No summary
Method | `adoptStreamPort` | Create a new `IListeningPort` from an already-initialized socket.
Method | `connectSSL` | Connect a client Protocol to a remote SSL socket.
Method | `connectTCP` | Connect a TCP client.
Method | `connectUNIX` | Connect a client protocol to a UNIX socket.
Method | `connectUNIXDatagram` | Connects a `ConnectedDatagramProtocol` instance to a path.
Method | `installWaker` | Install a `waker' to allow threads and signals to wake up the IO thread.
Method | `listenMulticast` | Connects a given DatagramProtocol to the given numeric UDP port.
Method | `listenSSL` | Connects a given protocol factory to the given numeric TCP/IP port. The connection is a SSL one, using contexts created by the context factory.
Method | `listenTCP` | Connects a given protocol factory to the given numeric TCP/IP port.
Method | `listenUDP` | Connects a given `DatagramProtocol` to the given numeric UDP port.
Method | `listenUNIX` | Listen on a UNIX socket.
Method | `listenUNIXDatagram` | Connects a given `DatagramProtocol` to the given path.
Method | `spawnProcess` | Spawn a process, with a process protocol.
Instance Variable | `waker` | Undocumented
Method | `_removeAll` | Remove all readers and writers, and list of removed `IReadDescriptor`s and `IWriteDescriptor`s.
Method | `_signalsFactory` | Customize reactor signal handling to support child processes on POSIX platforms.
Class Variable | `_supportedAddressFamilies` | Undocumented
Instance Variable | `_childWaker` | `None` or a reference to the `_SIGCHLDWaker` which is used to properly notice child process termination.

Inherited from `_DisconnectSelectableMixin` (via `PosixReactorBase`):

Method | `_disconnectSelectable` | Utility function for disconnecting a selectable.

Inherited from `ReactorBase` (via `PosixReactorBase`, `_DisconnectSelectableMixin`):

Method | `addSystemEventTrigger` | See twisted.internet.interfaces.IReactorCore.addSystemEventTrigger.
Method | `callFromThread` | See `twisted.internet.interfaces.IReactorFromThreads.callFromThread`.
Method | `callInThread` | See `twisted.internet.interfaces.IReactorInThreads.callInThread`.
Method | `callWhenRunning` | See twisted.internet.interfaces.IReactorCore.callWhenRunning.
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 | `getThreadPool` | See `twisted.internet.interfaces.IReactorThreads.getThreadPool`.
Method | `removeSystemEventTrigger` | See twisted.internet.interfaces.IReactorCore.removeSystemEventTrigger.
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 | `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
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 | `_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 | `_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 | `_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` (via `PosixReactorBase`, `_DisconnectSelectableMixin`, `ReactorBase`):

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, runLoop=None, runner=None): (source)
overrides `twisted.internet.base.ReactorBase.__init__`

Undocumented

def addReader(self, reader): (source)
from `twisted.internet.interfaces.IReactorFDSet`
overrides `twisted.internet.base.ReactorBase.addReader`

Implement `IReactorFDSet.addReader`.

def addWriter(self, writer): (source)
from `twisted.internet.interfaces.IReactorFDSet`
overrides `twisted.internet.base.ReactorBase.addWriter`

Implement `IReactorFDSet.addWriter`.

def callLater(self, _seconds, _f, *args, **kw): (source)
from `twisted.internet.interfaces.IReactorTime`
overrides `twisted.internet.base.ReactorBase.callLater`

Implement `IReactorTime.callLater`.

def crash(self): (source)
from `twisted.internet.interfaces.IReactorCore`
overrides `twisted.internet.base.ReactorBase.crash`

Implement `IReactorCore.crash`

def getReaders(self): (source)
from `twisted.internet.interfaces.IReactorFDSet`
overrides `twisted.internet.base.ReactorBase.getReaders`

Implement `IReactorFDSet.getReaders`.

def getWriters(self): (source)
from `twisted.internet.interfaces.IReactorFDSet`
overrides `twisted.internet.base.ReactorBase.getWriters`

Implement `IReactorFDSet.getWriters`.

def iterate(self, delay=0): (source)
from `twisted.internet.interfaces.IReactorCore`
overrides `twisted.internet.base.ReactorBase.iterate`

Emulate the behavior of `iterate()` for things that want to call it, by letting the loop run for a little while and then scheduling a timed call to exit it.

def mainLoop(self): (source)
overrides `twisted.internet.base.ReactorBase.mainLoop`

Run the runner (`CFRunLoopRun` or something that calls it), which runs the run loop until `crash()` is called.

def removeAll(self): (source)
from `twisted.internet.interfaces.IReactorFDSet`
overrides `twisted.internet.base.ReactorBase.removeAll`

Implement `IReactorFDSet.removeAll`.

def removeReader(self, reader): (source)
from `twisted.internet.interfaces.IReactorFDSet`
overrides `twisted.internet.base.ReactorBase.removeReader`

Implement `IReactorFDSet.removeReader`.

def removeWriter(self, writer): (source)
from `twisted.internet.interfaces.IReactorFDSet`
overrides `twisted.internet.base.ReactorBase.removeWriter`

Implement `IReactorFDSet.removeWriter`.

def startRunning(self, installSignalHandlers: `bool` = True): (source)
overrides `twisted.internet.base.ReactorBase.startRunning`

Start running the reactor, then kick off the timer that advances Twisted's clock to keep pace with CFRunLoop's.

def stop(self): (source)
from `twisted.internet.interfaces.IReactorCore`
overrides `twisted.internet.base.ReactorBase.stop`

Implement `IReactorCore.stop`.

def _flag2idx(self, flag): (source)

Convert a `kCFSocket...` constant to an index into the read/write state list (`_READ` or `_WRITE`) (the 4th element of the value of `self._fdmap`).

Parameters
flag | `kCFSocketReadCallBack` or `kCFSocketWriteCallBack`
Returns
`_READ` or `_WRITE`

def _moveCallLaterSooner(self, tple): (source)
overrides `twisted.internet.base.ReactorBase._moveCallLaterSooner`

Override `PosixReactorBase`'s implementation of `IDelayedCall.reset` so that it will immediately reschedule. Normally `_moveCallLaterSooner` depends on the fact that `runUntilCurrent` is always run before the mainloop goes back to sleep, so this forces it to immediately recompute how long the loop needs to stay asleep.

def _scheduleSimulate(self, force: `bool` = False): (source)

Schedule a call to `self.runUntilCurrent`. This will cancel the currently scheduled call if it is already scheduled.

Parameters
force:`bool` | Even if there are no timed calls, make sure that `runUntilCurrent` runs immediately (in a 0-seconds-from-now `CFRunLoopTimer`). This is necessary for calls which need to trigger behavior of `runUntilCurrent` other than running timed calls, such as draining the thread call queue or calling `crash()` when the appropriate flags are set.

def _socketCallback(self, cfSocket, callbackType, ignoredAddress, ignoredData, context): (source)

The socket callback issued by CFRunLoop. This will issue `doRead` or `doWrite` calls to the `IReadDescriptor` and `IWriteDescriptor` registered with the file descriptor that we are being notified of.

Parameters
cfSocket | The `CFSocket` which has got some activity.
callbackType | The type of activity that we are being notified of. Either `kCFSocketReadCallBack` or `kCFSocketWriteCallBack`.
ignoredAddress | Unused, because this is not used for either of the callback types we register for.
ignoredData | Unused, because this is not used for either of the callback types we register for.
context | The data associated with this callback by `CFSocketCreateWithNative` (in `CFReactor._watchFD`). A 2-tuple of `(int, CFRunLoopSource)`.

def _stopSimulating(self): (source)

If we have a CFRunLoopTimer registered with the CFRunLoop, invalidate it and set it to None.

def _unwatchFD(self, fd, descr, flag): (source)

Unregister a file descriptor with the `CFRunLoop`, or modify its state so that it's listening for only one notification (read or write) as opposed to both; used to implement `removeReader` and `removeWriter`.

Parameters
fd:`int` | a file descriptor
descr | an `IReadDescriptor` or `IWriteDescriptor`
flag | `kCFSocketWriteCallBack` `kCFSocketReadCallBack`

def _wakerFactory(self) -> `_WakerPlus`: (source)
overrides `twisted.internet.posixbase.PosixReactorBase._wakerFactory`

Undocumented

def _watchFD(self, fd, descr, flag): (source)

Register a file descriptor with the `CFRunLoop`, or modify its state so that it's listening for both notifications (read and write) rather than just one; used to implement `addReader` and `addWriter`.

Parameters
fd:`int` | The file descriptor.
descr | the `IReadDescriptor` or `IWriteDescriptor`
flag | the flag to register for callbacks on, either `kCFSocketReadCallBack` or `kCFSocketWriteCallBack`

_cfrunloop = (source)

the `CFRunLoop` pyobjc object wrapped by this reactor.

_currentSimulator: `object|None` = (source)

if a CFTimer is currently scheduled with the CF run loop to run Twisted callLater calls, this is a reference to it. Otherwise, it is `None`

_fdmap: `dict` = (source)

a dictionary, mapping an integer (a file descriptor) to a 4-tuple of:

- source: a `CFRunLoopSource`; the source associated with this socket.
- socket: a `CFSocket` wrapping the file descriptor.
- descriptor: an `IReadDescriptor` and/or `IWriteDescriptor` provider.
- read-write: a 2-`list` of booleans: respectively, whether this descriptor is currently registered for reading or registered for writing.

_idmap: `dict` = (source)

a dictionary, mapping the id() of an `IReadDescriptor` or `IWriteDescriptor` to a `fd` in `_fdmap`. Implemented in this manner so that we don't have to rely (even more) on the hashability of `IReadDescriptor` providers, and we know that they won't be collected since these are kept in sync with `_fdmap`. Necessary because the .fileno() of a file descriptor may change at will, so we need to be able to look up what its file descriptor used to be, so that we can look it up in `_fdmap`

_inCFLoop: `bool` = (source)

Is `CFRunLoopRun` currently running?

_runner = (source)

Undocumented

_started: `bool` = (source)
overrides `twisted.internet.base.ReactorBase._started`

Undocumented