Features

Allow blocking code to call into Twisted and block until results are available
or a timeout is hit, using the crochet.wait_for decorator.

A lower-level API (crochet.run_in_reactor) allows blocking code to run
code “in the background” in the Twisted thread, with ability to repeatedly
check if it’s done.

Additionally Crochet can:

Transparently start Twisted’s reactor in a thread it manages.

The reactor shuts down automatically when the process’ main thread finishes.

Hooks up Twisted’s log system to the Python standard library logging
framework. Unlike Twisted’s built-in logging bridge, this includes
support for blocking Handler instances.

What’s New

1.2.0

New features:

crochet.wait_for implements the timeout/cancellation pattern documented
in previous versions of Crochet. crochet.wait_for_reactor and
EventualResult.wait(timeout=None) are now deprecated, since lacking
timeouts they could potentially block forever.

Functions wrapped with wait_for and run_in_reactor can now be accessed
via the wrapped_function attribute, to ease unit testing of the underlying
Twisted code.

API changes:

It is no longer possible to call EventualResult.wait() (or functions
wrapped with wait_for) at import time, since this can lead to deadlocks
or prevent other threads from importing. Thanks to Tom Prince for the bug
report.

Bug fixes:

warnings are no longer erroneously turned into Twisted log messages.

The reactor is now only imported when crochet.setup() or
crochet.no_setup() are called, allowing daemonization if only crochet
is imported (http://tm.tl/7105). Thanks to Daniel Nephin for the bug report.

Documentation:

Improved motivation, added contact info and news to the documentation.

Better example of using Crochet from a normal Twisted application.

1.1.0

Bug fixes:

EventualResult.wait() can now be used safely from multiple threads,
thanks to Gavin Panella for reporting the bug.

Crochet should now work on Windows, thanks to Konstantinos Koukopoulos.

Crochet tests can now run without adding its absolute path to PYTHONPATH or
installing it first.

Documentation:

EventualResult.original_failure is now documented.

1.0.0

Documentation:

Added section on use cases and alternatives. Thanks to Tobias Oberstein for
the suggestion.

Bug fixes:

Twisted does not have to be pre-installed to run setup.py, thanks to
Paul Weaver for bug report and Chris Scutcher for patch.

Importing Crochet does not have side-effects (installing reactor event)
any more.

Blocking calls are interrupted earlier in the shutdown process, to reduce
scope for deadlocks. Thanks to rmorehead for bug report.

0.9.0

New features:

Expanded and much improved documentation, including a new section with
design suggestions.

New decorator @wait_for_reactor added, a simpler alternative to
@run_in_reactor.

Refactored @run_in_reactor, making it a bit more responsive.

Blocking operations which would otherwise never finish due to reactor having
stopped (EventualResult.wait() or @wait_for_reactor decorated call)
will be interrupted with a ReactorStopped exception. Thanks to rmorehead
for the bug report.