Bjoern: Python 3のサポート(PEP 3333)

作成日 2011年01月13日  ·  18コメント  ·  ソース: jonashaag/bjoern

他の誰かがこれをすることを志願するならば、それについて私に尋ねてください:)

最も参考になるコメント

@jonashaag私はそれを拾い上げてpython3で動作させました...これがマージするのに十分クリーンかどうかはわかりませんが、コメント/提案は大歓迎です。 :-)

https://github.com/jonashaag/bjoern/pull/104

全てのコメント18件

同じ投稿に来ました。 私は喜んでいますが、C拡張機能の経験は文字通りゼロです。 私が何か助けになることができたら私に知らせてください。 2から3への拡張機能の移植について説明している適切なツールまたはドキュメントを教えていただければ、それを注いで運試しをします。

移植する必要のあるものはそれほど多くないので、それほど難しいことではありません。

Py3ではPyString_fooがなくなったため、ネイティブ文字列型(WSGI dict key / values)のマクロを使用する必要があります。

一般的なPy2-to-Py3移植のヘルプについては、 http: //rhodesmill.org/brandon/2008/porting-ac-extension-module-to-python-30/も参照してください。

ご不明な点がございましたら、お気軽にメールでお問い合わせください:)

記録のために、ここにPEP333とPEP3333の差分があります:http: //paste.pocoo.org/show/320496/

申し訳ありませんが、私はこれを自分で達成することはできません。 ここで何かが誰かの助けになることを願っています。 私は単にCを知りません。

私のフォークの現在の状態コードでは、vPy2は影響を受けない(動作している)ように見え、vPy3は少なくとも初期化できるようにコンパイルされます。 このバックトレースによると、最初のリクエストを行うとセグメンテーション違反が発生します。


http://docs.python.org/py3k/howto/cporting.htmlでは、以下の変更について説明しています。

  • longs / ints
  • 文字列
  • モジュール

Longs / Ints

request.cPyInt_FromLongからPyLong_FromLongに移動する必要がある2つのインスタンスを含む1行があります。

文字列

これらの定義は、 PyStringのすべてのインスタンスをカバーする必要があります。

モジュールの初期化

http://docs.python.org/py3k/c-api/module.htmlに詳細が記載されています。

cStringIOは非推奨になりました

request.ccStringIOは、標準のPyBytesに置き換える必要があると思います。

1つのcString関数の代わりにmemcpyを使用しましたが、 wsgi.inputの処理方法がわかりませんでした。 PycString_IMPORTへの呼び出しは、置き換えなしで削除されました。

モジュールの初期化:それは醜いです:-(彼らは少なくとも私たちから真実を隠すルーチンを提供することができたでしょう:-(

文字列:Py3のPyBytesではなく、Py3のヘッダーアイテムにPyUnicodeを使用し、Py2のPyStringを使用する必要があります。 PEP 3333 diffを読みましたか?

cStringIO:良い考えです。実際、cStringIOを使用する理由はまったくわかりません(コンテンツの長さがわかっているため、静的な文字列オブジェクトで十分です)。 ただし、WSGIアプリケーションを呼び出す前にcStringIOをファイルのように変換する必要があるため、Py3 cStringIO置換(それが何であれ)を使用するか、独自のラッパーをロールアウトします(私はそれを行うことができます)。

ところで、セグメンテーション違反は、要求の本文がないという理由だけで、渡された引数がNULLポインターであるためです。

モジュールの初期化:それは醜いです:-(彼らは少なくとも私たちから真実を隠すルーチンを提供することができたでしょう:-(

ええ、それは実際には<1KLOCにも役立ちません。 ボイラープレートの多くを実際に取り外したところですが、それほど悪くはありません。

文字列:Py3のPyBytesではなく、Py3のヘッダーアイテムとPy2のPyStringにPyUnicodeを使用する必要があります。 PEP 3333 diffを読みましたか?

ええ、十分ではありません。 私は実際に公式の差分を使用し、黄色で迷子になりました。ほとんどすべてがバイト文字列を参照しています。 あなたが正しい。 適切なコードをすべてPyBytesとPyUnicodeに置き換え、 defineをPyString forPy2xに戻しました。 environおよび/またはヘッダーはこのように処理する必要がありますか? HTTP/1.1 400 Bad RequestPyUnicode_FromStringを使用すると、telnetはゴミを吐き出しますが、 PyBytes_FromStringは正常に機能します。

Googleは、マイナーな例外を除いて、参照されているcStringIOとPython3を見つけることができません。 これが1つです。 完全に削除しました

それは間違ったセグメンテーション違反でした、ごめんなさい。 私はすでに少なくともそのソースをたどっていました。 これは、 wsgi_appが呼び出せないことについて不平を言っているので、実行可能なサーバーに近いと思います。 それを理解できれば、エンコーディングの問題をより適切に解決できるようになります。

ネイティブ文字列/ Unicode文字列のことを少し台無しにしていると思うので、ここにいくつかのヒントがあります:

2つのヘッダーファイルpy2.hpy3.hを使用し、#すべての_used_ PyStr_*ルーチンをPythonバージョンのネイティブデータ型( str 、= PyString Py2ではPyUnicode )。 次に、 PyBytes_*マクロをPy2のPyStringに定義します(Py2のstrはPy3のbytesあるため)。 PyUnicodeは、PEP 3333が強調しているように、Python2を使用する場合はまったく使用されません。

応答は常にPyBytesである必要があります:Python 2では、 PyStringはバイトであるため、エンコードを行う必要はありませんが、Python 3では、WSGIアプリケーションがPyUnicodeを返すかどうかはわかりません

あなたのセグメンテーション違反は非常に奇妙です。 私はあなたがどこか他の場所でrefcountsを台無しにしたと思います...誰もがそうすることを心配しないでください:)

on_bodyを呼び出すたびに以前に受信したデータが上書きされるため、現在のcStringIO置換( memcpyを使用)は壊れています。 memcpy edデータの合計量を追跡する必要があります( bjparser構造体を拡張します)。 また、 body = FromString(body) (203行目)は不要であり、本文全体をコピーするため、削除します。

本当にありがとうございました!

ねえアンジェロ、Py3サポートに関するニュースはありますか?

ping! すぐにこれを復活させる計画はありますか? そうでなければ、私はそれを突き刺すかもしれません。

いいえ、計画はありません。 他の誰かによる移植https://github.com/isaiah/bjoern-py3がありますが、私はそれをテストしたことがなく、さらにコードが多すぎます(bytesioオブジェクト)。

bjoernがSO_REUSEPORTを実装した唯一のWSGIサーバーであることを知らせる古い問題の復活。 残念ながら使えません。

本気ですか? これは、すべてのサーバーが実装する必要がある標準機能です

これらのサーバーのいくつかでは、すでに開いているソケットを渡すことができますが、ほとんどの場合、それは非常に複雑なので、それについて考えても後悔するでしょう。

公平を期すために、uWSGIはおそらく何らかの方法でそれをサポートしていますが、ドキュメントは私を殺しています。

私はこのプロジェクトが遅すぎることに気づきました:-(これまでずっと、nginxの周りで踊ることなく、軽量のPython Webサーバーを夢見ていました。Python3について本当に計画はありませんか?

いいえ。ただし、実装するのにそれほど複雑であってはならないので、CPython C APIの経験がある(またはそれを学ぶ気がある)場合は、遠慮なくお問い合わせください。

待ってください、Bjoernは2017年にPython 3をサポートしていません、そしてこの問題はまだ開いていますか? わお。 これはプロジェクトにとって実行可能なオプションではないと思います:(

@jonashaag私はそれを拾い上げてpython3で動作させました...これがマージするのに十分クリーンかどうかはわかりませんが、コメント/提案は大歓迎です。 :-)

https://github.com/jonashaag/bjoern/pull/104

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

alexted picture alexted  ·  12コメント

thedrow picture thedrow  ·  22コメント

avloss picture avloss  ·  3コメント

voroninman picture voroninman  ·  5コメント

alexhultman picture alexhultman  ·  14コメント