- Added support for Python 3.8 and PyPy 3.
- Dropped support for Python 3.4, since latest Twisted doesn’t support it.
- Added support for Python 3.7. Thanks to Jeremy Cline for the patch.
- The underlying callable wrapped
@wait_foris now available via the more standard
Backwards incompatibility (in tests):
- This was actually introduced in 1.8.0:
wrapped_functionmay not always be available on decorated callables. You should use
- Fixed regression in 1.8.0 where bound method couldn’t be wrapped. Thanks to 2mf for the bug report.
- Signatures on decorated functions now match the original functions. Thanks to Mikhail Terekhov for the original patch.
- Documentation improvements, including an API reference.
- Switched to EPoll reactor for logging thread. Anecdotal evidence suggests this fixes some issues on AWS Lambda, but it’s not clear why. Thanks to Rolando Espinoza for the patch.
- It’s now possible to call
@classmethod. Thanks to vak for the bug report.
- If the Python
logging.Handlerthrows an exception Crochet no longer goes into a death spiral. Thanks to Michael Schlenker for the bug report.
- Versions of Twisted < 16.0 are no longer supported (i.e. no longer tested in CI.)
- Added support for Python 3.6.
- Added support for Python 3.5.
- Python 2.6, Python 3.3, and versions of Twisted < 15.0 are no longer supported.
- Added support for Python 3.4.
- Added a section on known issues and workarounds.
- Main thread detection (used to determine when Crochet should shutdown) is now less fragile. This means Crochet now supports more environments, e.g. uWSGI. Thanks to Ben Picolo for the patch.
- It is now possible to call
EventualResult.wait()(or functions wrapped in
wait_for) at import time if another thread holds the import lock. Thanks to Ken Struys for the patch.
crochet.wait_forimplements the timeout/cancellation pattern documented in previous versions of Crochet.
EventualResult.wait(timeout=None)are now deprecated, since lacking timeouts they could potentially block forever.
- Functions wrapped with
run_in_reactorcan now be accessed via the
wrapped_functionattribute, to ease unit testing of the underlying Twisted code.
- 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.
warningsare no longer erroneously turned into Twisted log messages.
- The reactor is now only imported when
crochet.no_setup()are called, allowing daemonization if only
crochetis imported (http://tm.tl/7105). Thanks to Daniel Nephin for the bug report.
- Improved motivation, added contact info and news to the documentation.
- Better example of using Crochet from a normal Twisted application.
EventualResult.wait()can now be used safely from multiple threads, thanks to Gavin Panella for reporting the bug.
- Fixed reentrancy deadlock in the logging code caused by http://bugs.python.org/issue14976, thanks to Rod Morehead for reporting the bug.
- Crochet now installs on Python 3.3 again, thanks to Ben Cordero.
- 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.
EventualResult.original_failureis now documented.
- Added section on use cases and alternatives. Thanks to Tobias Oberstein for the suggestion.
- 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.
- Expanded and much improved documentation, including a new section with design suggestions.
- New decorator
@wait_for_reactoradded, a simpler alternative to
@run_in_reactor, making it a bit more responsive.
- Blocking operations which would otherwise never finish due to reactor having
@wait_for_reactordecorated call) will be interrupted with a
ReactorStoppedexception. Thanks to rmorehead for the bug report.
@run_in_reactordecorated functions (or rather, their generated wrapper) are interrupted by Ctrl-C.
- On POSIX platforms, a workaround is installed to ensure processes started by reactor.spawnProcess have their exit noticed. See Twisted ticket 6378 for more details about the underlying issue.
EventualResult.wait()now raises error if called in the reactor thread, thanks to David Buchmann.
- Unittests are now included in the release tarball.
- Allow Ctrl-C to interrupt
- Improved documentation.
EventualResult, to reduce confusion with Twisted’s
Deferredclass. The old name still works, but is deprecated.
@in_reactor, replaced with
@run_in_reactorwhich doesn’t change the arguments to the wrapped function. The deprecated API still works, however.
- Unhandled exceptions in
EventualResultobjects are logged.
- Added more examples.
setup.py sdistshould work now.
- Initial release.