Python用の一般的なライブラリの高速アナログ

そのため、数か月間、ARMプロセッサのハードウェアをサーバーとして真剣に使用しようとしました。

私はこれについてここここに書い

多くの場合、パフォーマンスが十分ではなかったため、C / C ++を頻繁に使用して、さまざまな代替手段を見つけて探しました。 カットされたいくつかのライブラリ。





誰もがこれについてすでに知っているならば、私は前もって謝罪します、しかし、私はつい最近これらのlibsを発掘しました。



ジョンソン



ここで彼なしで今どこに? Webアプリケーションの場合、これは基本的に主な形式です。 サーバーは、Python構造をすばやくJSONに変換し、ブラウザーまたはデバイスに提供できる必要があります。 おそらく大多数はjsonをインポートし、すべてがうまくいっているでしょう...

しかし、何倍も速く必要な場合は、 ujsonに会ってください 。 加速順序はリンクで表示できますが、ARMでは、本質的に、ujsonを使用することでリクエスト時間を数秒から1秒未満に短縮できました。 ujson構文は通常のjsonに似ていますが、一部の属性が欠落しています(たとえば、日時を変換するための独自のハンドラーを取得できませんでした)。 また、ujsonはpython3と互換性があり、その不具合に遭遇したことはありません。

JSONに英語以外のテキストがたくさんある場合は、dumps関数にensure_ascii = Falseパラメータを使用すると非常に有益です。 実際には、デフォルトではテキストは\ u表記法を使用してJSONでエンコードされ、文字ごとに6-8バイトになります。純粋にutf-8にすべてを送信でき、返されたJSONを2または3倍減らします(たとえgzipで使用されます)。

重要:通常のjsonの場合、ensure_ascii = Falseの場合、深刻なパフォーマンスの低下につながります。ujsonの場合、パフォーマンスの改善やわずかな低下さえも起こりえます。



Feedparser



多くの場合、このライブラリを使用してRSS、ATOMなどを解析しました。 以前はそのパフォーマンスに悩まされていましたが、1つのRSSフィードの解析に1分かかる可能性があるため、まったく使用できませんでした。 SpeedParserのおかげで 、RSSの解析時間を数秒に短縮することができました。 一般に、構文はFeedParserと互換性がありますが、動作は非常に異なります。 たとえば、カスタムの名前空間が表示されないか、リストにない無視された名前空間(libにしっかり詰まっている)は表示されません。 いくつかのエラーを修正するために、MonkeyPatching(alas)を使用しました。



Gzip



最大値を使用することはできませんが、係数5を中心に展開することをお勧めします。以下では、サイズが速度に強く影響を与え始め、それ以上では、リターンのコンテンツの形成が大幅に遅くなります。 gzipのアナログを見つけることは困難です(システムで簡単に置き換えることができます)が、ヒントがあります-nginx側でのみ使用し、Pythonからは試さないでください。 テストプロジェクトの1つで、Pythonのミドルウェアとしてgzip圧縮を使用し、nginxに移動することで負荷を軽減できました。



フレームワーク



オーバーヘッドが少ないほど良い。 大きなフレームワークを展開しようとしないでください、それらは動作しますが、すでに他の数人の人々にはすべてが賭けになります。 空白ページでのパイロンとトルネードの違いは、後者を支持して3回です。



このようなもの。

ここでのチャットストーリーの続き: habrahabr.ru/post/228703



本文中の多くの専門用語の脅威、申し訳ありませんが、私はとてもうれしく思います。

ZY2エラーの可能性は最も高いので、見つけたら個人で書いてください。



All Articles