どのようにあるmysqlclientを選択しますpymysql?使用_gevent_waiter

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/u011510825/article/details/86632598

    PythonのMySQLを使用しての接続は、三者のパッケージが必要で、現在主流の方法は、pymysqlとはmysqlclient(のMySQLdbのつまりのpython3バージョン)です。別のcymysql(pymysqlスピードアップのCのフォークとオプション)

 

[email protected]:1.著者は、2つのライブラリが稲田直樹、PIPライブラリのメールボックスがmailtoのを指している同じ人であります

2. PyMySQLコードスタッフのメタンは、より速く、PyMySQLアプリケーションシナリオはmysqlclientを言います

 

    だから、どのように我々は選ぶべきなのでしょうか?まず、我々はこの2つのパッケージについて知っておく必要があります。

    、pymysql

      1)純粋なPythonの、簡単​​なインストール(直接取り付けPIP)を達成するために

      2)純粋なPython実装に起因geventフレームワークとの良好な組み合わせであることができます

 

二つ、あるmysqlclient

    1)C拡張モジュールは、コンパイラのインストールが報告されたエラーの様々な、明らかに簡単なpymysqlを引き起こす可能性があり

    2)高速。

 

上記の比較では、あなたは明確にする必要があり、パフォーマンスの低下のpymysqlのあるmysqlclientの比率ですが、シンプルで使いやすいpymysql。一般的に次の3つの条件がない限りはmysqlclientを選択する必要があります。

1)あなたは、いくつかの理由でlibmysqlclientの使用することはできません

2)あなたはgeventまたはeventletで使用したいです

3)プロトコル互換MySQLを検討

元はこれです:

mysqlclient-python is much faster than PyMySQL.
When to use PyMySQL is:

You can't use libmysqlclient for some reason
You want to use monkeypatched socket of gevent or eventlet
You wan't to hack mysql protocol

上記の理由から、あるmysqlclientよりもはるかに現在の使用pymysqlプログラマー、特に第二、今のpythonサイト、基本geventのために使用されるか、またはそれをeventletすることにつながりました。

強力なあるmysqlclientはあるmysqlclientは現在も使用することができgevent、解決されました。直接コードに:

import MySQLdb
import gevent.hub

def _gevent_waiter(fd, hub=gevent.hub.get_hub()):
    hub.wait(hub.loop.io(fd, 1))




conn = MySQLdb.connect(
                db=self.db,
                host=self.host if not self.ssh else LOOPBACK_ADDRESS,
                port=self.port if not self.ssh else int(self.ssh.local_bind_port),
                user=self.user,
                password=self.passwd,
                charset=self.charset,
                connect_timeout=self.connect_timeout,
                cursorclass=DictCursor,
                use_unicode=True,
                waiter=_gevent_waiter,
            )


上記接続、他のパラメータ多くの説明は、それがgeventとシームレスに等価mysqlclinetと、ウェイター述べ。

あなたがこの記事読むことができ、その_gevent_waiterを理解していない   geventハブを  。

だから、どのように我々はそれをテストするのですか?テストプロセスは完璧なウェイター= _gevent_waiterと、クエリが20秒データベースtime.sleep実行されるときに、データベースへの接続は、他の要求のWebサービスを参照するには、この時間は、要求を処理できない場合、単一のWebサービス・プロセスから、比較的単純ですああ。

これにより、システムは、データベースクエリサービスの大規模な数を持って、私は竜巻を使用しないことがあります。

 

githubの住所:

https://github.com/PyMySQL/mysqlclient-python

https://github.com/PyMySQL/PyMySQL/

 

現時点では、コントラストpymysqlとはmysqlclientの指標:

https://python.libhunt.com/compare-mysqlclient-python-vs-pymysql

プログラムのほとんどは、ああ,,,猿があまりにも多くのよりpymysqlのMySQLdb遅く......使いやすいが、pymysqlのパフォーマンスの低下を選択し、まだ比較的トラブルで冷却されているので、大規模なプロジェクトはまだでビット無味ああpymysqlを感じますこれはMySQLdbはを使用することが示唆されました。

 

 

おすすめ

転載: blog.csdn.net/u011510825/article/details/86632598