21

私はたくさんのスクリプト言語(python、ruby、lua、php)を知っていますが、C / C ++のようなコンパイル済み言語は知りません。私は、本質的にpythonであるcythonを使用していくつかのpythonコードを高速化してみたかったのです。 >Python用のC拡張機能を作成することを目的としたCコンパイラ。基本的に、C->ネイティブコードにコンパイルされるより厳密なバージョンのPythonでコーディングします。

ここに問題があります、私はCを知りません、それでもcythonのドキュメントは明らかにすでにCを知っている人々を対象としています(何も説明されておらず、提示されているだけです)、そして私には役に立ちません、私は何か良いものがあるかどうかを知る必要がありますPythonプログラマーを対象としたcythonチュートリアル、またはCythonを学ぶ前にCを学ぶ必要がある場合。

私は有能なPythonプログラマーであることを忘れないでください。私は、cythonを学ぶためにまったく新しい言語を学ぶのではなく、すでに得意な言語の観点からcythonを学びたいと思っています。

1)psycoをお勧めしないでください

編集:公式のcythonドキュメントを理解するのに役立つ情報はすべて有用な情報です

4

7 に答える 7

18

cython2つの異なることが得意です

  1. C言語ライブラリとのインターフェース
  2. Pythonコードの高速化

それはおそらく1からより多くの露出を得るでしょう。したがって、Cのものに向けてあなたが見つけたチュートリアル資料に重点を置いています。2.のように使いたいようですが。

私の経験から、cythonPythonプログラムをコンパイルしてみて、それが機能するかどうかを確認できます。それは少し速くなります(多分)。はるかに高速にするには、PythonタイプをCタイプに選択的に変換する必要があります。これにより、cythonの力が発揮され始めます。

公式チュートリアルを見ると、彼らがcdefキーワードをどこで使用したかを調べる必要があります。

要約すると

  1. 既存のPythonプログラムをcythonでコンパイルし、変更をできるだけ少なくします
  2. いくつかの変数をとして宣言しcdef、それを再び機能させる
  3. 十分に速くない場合は、ステップ2に進みます。

チュートリアルへのポインタではないことをお詫び申し上げますが、それはあなたに進むべき方向を与えるはずです!

于 2009-10-17T12:45:34.383 に答える
8

Cを学ぶ!(申し訳ありませんが、たまらないです。)

しかし、真剣に、効果的に使用するためには、ほとんどの場合、 C変数タイプ(必要に応じてCタイプ)について知る必要があるようです。cdef

後で、弾丸を噛んでCを適切に学習することにした場合は、Amazonで入手できるKernighan and Ritchie、またはK&Rのコピーを利用してください。

于 2009-10-17T13:45:01.807 に答える
2

これを見たことがありますか:http://www.perrygeo.net/wordpress/?p=116はかなり良い概要のようです。また、pyzmqとgeventのソースを確認することもできます。これらはコアコードにCythonを使用しています。

ベン

于 2010-09-23T14:15:43.620 に答える
1

Cythonは同時実行性をサポートしています(cでネイティブPOSIXスレッドを使用できます。これはエクステントイオンモジュールでコンパイルできます)。GILがリリースされたときにPythonオブジェクトを変更しないように十分注意する必要があり、インタープリター自体がスレッドセーフではありません。また、Pythonでマルチプロセッシングを使用して、並列処理にさらに多くのコアを使用することもできます。これにより、コンパイルされたcython拡張機能を使用してさらに高速化できます。しかし、全体として、cプログラミングモデル、静的型などを確実に知っている必要があります

于 2012-05-17T20:57:10.507 に答える
1

次のCクイズに答えることができれば、Cythonで非常に役立つことがたくさんできます...

(1)ダブルとは何ですか?intとは何ですか?

(2)「コンパイル」という言葉はどういう意味ですか?

(3)ヘッダー(.h)ファイルとは何ですか?

これらの質問に答えるために、Cの本全体を読む必要はありません!...多分第1章。

そのクイズに合格したら、チュートリアルをもう一度やり直してください。

私が通常行うことは、純粋なPythonコードから始めて、Cython要素を少しずつ追加することです。そのような状況では、Cythonの機能を少しずつ学ぶことができます。たとえば、これまで文字列を含むコードを暗号化しようとしたことがないため、C文字列を理解していません。その際、最初にCで文字列がどのように機能するかを調べ、次にCythonで文字列がどのように機能するかを調べます。

繰り返しになりますが、Cythonを使い始めると、Cを少し学ぶ必要のある複雑な問題に遭遇することがあります。もちろん、Cを知っているほど、Cythonを最大限に活用できるようになります。何か問題が発生した場合のトラブルシューティングについて言及します。しかし、それで始めたがらないわけではありません。

于 2012-06-19T14:45:38.613 に答える
0

あなたが本当に知る必要があるすべてのCについては:

  1. C型はPython型よりもはるかに高速です(C intsまたはdoubleへの追加は単一のクロックサイクルで実行できます)が、安全性は低くなります(任意のサイズではなく、サイレントにオーバーフローする可能性があります)。
  2. C関数(cdef)呼び出しは、Python()関数呼び出しよりもはるかに高速ですdef(ただし、柔軟性は低くなります)。

これにより、ほとんどの方法でそこにたどり着きます。ほとんどのアプリケーションで最後の10〜20%の高速化を実現したい場合は、Cと、最新のプロセス(ポインター、キャッシュなど)がどのように機能するかを理解する必要はありません。

于 2010-04-06T03:16:56.340 に答える
0

Cythonはスレッドをまったくサポートしていません。GIL(グローバルインタプリタロック)を常時保持します!これにより、同時実行が(事実上)無効になるため、コードがスレッドセーフになります。ですから、汎用開発には使いません。

于 2010-12-14T23:48:02.000 に答える