読者です 読者をやめる 読者になる 読者になる

DjangoでTwistedのDeferを使う

Django Python

 id:mopemopeさんから頂いたコメントのおかげで、すでに先人がtwisted.web2でDjangoを動かしていることを知りました。mopemopeさん、ありがとうございます!

  • Twisted (twisted.web2) support for Django

http://code.djangoproject.com/ticket/172

  • Twisted support for Django with Defer enable

http://code.djangoproject.com/ticket/2904


 問題なのは、tikcet #2904のコードが不親切で、このままでは動かないこと。これを動かすには、少なくとも以下の依存関係を確認しておかなくてはなりません。

名前 モジュール
BaseHandler django.core.handlers.base
WSGIRequest django.core.handlers.wsgi
STATUS_CODE_TEXT django.core.handlers.wsgi
dispatcher django.dispatch.dispatcher
signals dinago.core.signals


 上記のモジュールをTicket #2904のコード内でインポートするようにすれば、Deferサポートを有効にしてDjangoを起動できるはずです。
 が、DjangoのバージョンとTwistedのバージョンによっては、さらに手を入れなくてはいけないようです。
 ハマリやすいポイントは、

  1. Ticket #172で、"outdated"として訂正されているコードも、SVN版のtwisted.web2では、さらにoutdatedになっています。
  2. Ticket #2904のWrapDjangoWSGIHandlerのdoneメソッドのパラメータには誤りがあり、そもそも動きません。
  3. Django Changeset 3875でBaseHandler.get_responseのパラメータが変更されました。
  4. Django Changeset 3877で、ENABLE_PSYCOオプションが削除されました。


 Django 0.96-pre(rev. 4061)と、twisted.web2 0.2(rev.18634)で動作を確認したスクリプトを、以下のリンク先に掲載しておきます。


http://www.geocities.co.jp/ndpcw007/perezvon/django_on_twisted.html


 Twistedは奥が深いです。もっと勉強しなきゃなぁ。うくく。