<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Crochet is an MIT-licensed library that makes it easier for
      blocking or
      threaded applications like Flask or Django to use the Twisted
      networking
      framework. Crochet provides the following features:</p>
    <ul class="simple">
      <li>Runs Twisted's reactor in a thread it manages.</li>
      <li>The reactor shuts down automatically when the process' main
        thread finishes.</li>
      <li>Hooks up Twisted's log system to the Python standard library <tt
          class="docutils literal">logging</tt>
        framework. Unlike Twisted's built-in <tt class="docutils
          literal">logging</tt> bridge, this includes
        support for blocking Handler instances.</li>
      <li>A blocking API to eventual results (i.e. <tt class="docutils
          literal">Deferred</tt> instances). This last
        feature can be used separately, so Crochet is also useful for
        normal Twisted
        applications that use threads.</li>
    </ul>
    <p>You can download Crochet at: <a
        href="http://pypi.python.org/pypi/crochet">http://pypi.python.org/pypi/crochet</a><br>
    </p>
    <p>Documentation can be found at: <a
        href="http://crochet.readthedocs.org">http://crochet.readthedocs.org</a></p>
    <p>Bugs and feature requests should be filed at the project page: <a
        href="https://github.com/itamarst/crochet">https://github.com/itamarst/crochet</a><br>
    </p>
    <p><strong>What's New in 0.9.0</strong></p>
    <p>New features:</p>
    <ul class="simple">
      <li>Expanded and much improved documentation, including a new
        section with
        design suggestions.</li>
      <li>New decorator <tt class="docutils literal">@wait_for_reactor</tt>
        added, a simpler alternative to
        <tt class="docutils literal">@run_in_reactor</tt>.</li>
      <li>Refactored <tt class="docutils literal">@run_in_reactor</tt>,
        making it a bit more responsive.</li>
      <li>Blocking operations which would otherwise never finish due to
        reactor having
        stopped (<tt class="docutils literal">EventualResult.wait()</tt>
        or <tt class="docutils literal">@wait_for_reactor</tt>
        decorated call)
        will be interrupted with a <tt class="docutils literal">ReactorStopped</tt>
        exception.</li>
    </ul>
    <p>Bug fixes:</p>
    <ul class="simple">
      <li><tt class="docutils literal">@run_in_reactor</tt> decorated
        functions (or rather, their generated wrapper)
        are interrupted by Ctrl-C.</li>
      <li>On POSIX platforms, a workaround is installed to ensure
        processes started by
        <cite>reactor.spawnProcess</cite> have their exit noticed. See <a
          class="reference external" href="http://tm.tl/6738">Twisted
          ticket 6378</a>
        for more details about the underlying issue.</li>
    </ul>
  </body>
</html>