最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

給Python中的MySQLdb模塊添加超時功能的教程

 更新時間:2015年05月05日 11:56:46   投稿:goldensun  
這篇文章主要介紹了給Python中的MySQLdb模塊添加超時功能的教程,timeout功能在服務(wù)器的運維當(dāng)中非常有用,需要的朋友可以參考下

使用Python操作MySQL數(shù)據(jù)庫的時候常使用MySQLdb這個模塊。

今天在開發(fā)的過程發(fā)現(xiàn)MySQLdb.connect有些參數(shù)沒法設(shè)置。通過這個頁面我們可以看到在connect的時候,可以設(shè)置的option和client_flags和MySQL c api相比差不少。

一個很重要的參數(shù) MYSQL_OPT_READ_TIMEOUT沒法設(shè)置,這個參數(shù)如果不設(shè)置,極致狀況MySQL處于hang住,自動切換IP漂移,客戶端無法重連到新MySQL。

給MySQLdb加Option很簡單,只要修改_mysql.c這個把Python對象映射到MySQL操作的文件,添加參數(shù),再加一段mysql_option即可。

下面是修改后的git diff 文件

?View Code BASH

diff --git a/_mysql.c b/_mysql.c
index d42cc54..61a9b34 100644
--- a/_mysql.c
+++ b/_mysql.c
@@ -489,9 +489,10 @@ _mysql_ConnectionObject_Initialize(
"named_pipe", "init_command",
"read_default_file", "read_default_group",
"client_flag", "ssl",
-                 "local_infile",
+                 "local_infile", "read_timeout",
NULL } ;
int connect_timeout = 0;
+    int read_timeout = 0;
int compress = -1, named_pipe = -1, local_infile = -1;
char *init_command=NULL,
*read_default_file=NULL,
@@ -500,7 +501,7 @@ _mysql_ConnectionObject_Initialize(
self->converter = NULL;
self->open = 0;
check_server_init(-1);
-    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ssssisOiiisssiOi:connect",
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ssssisOiiisssiOii:connect",
kwlist,
&host, &user, &passwd, &db,
&port, &unix_socket, &conv,
@@ -509,7 +510,8 @@ _mysql_ConnectionObject_Initialize(
&init_command, &read_default_file,
&read_default_group,
&client_flag, &ssl,
-                    &local_infile /* DO NOT PATCH FOR RECONNECT, IDIOTS
+                    &local_infile, &read_timeout
+                    /* DO NOT PATCH FOR RECONNECT, IDIOTS
IF YOU DO THIS, I WILL NOT SUPPORT YOUR PACKAGES. */
))
return -1;
@@ -540,6 +542,12 @@ _mysql_ConnectionObject_Initialize(
mysql_options(&(self->connection), MYSQL_OPT_CONNECT_TIMEOUT,
(char *)&timeout);
}
+
+    if (read_timeout) {
+        unsigned int timeout = read_timeout;
+        mysql_options(&(self->connection), MYSQL_OPT_READ_TIMEOUT, (char *)&timeout);
+    }
+
if (compress != -1) {
mysql_options(&(self->connection), MYSQL_OPT_COMPRESS, 0);
client_flag |= CLIENT_COMPRESS;

代碼修改完畢,python setup.py install 即可,如果出現(xiàn)mysql_config找不到的問題。你還要修改setup_posix.py文件。

hoterran@hoterran-laptop:~/Projects/MySQL-python-1.2.3$ git diff setup_posix.py
diff --git a/setup_posix.py b/setup_posix.py
index 86432f5..f4f08f1 100644
--- a/setup_posix.py
+++ b/setup_posix.py
@@ -23,7 +23,7 @@ def mysql_config(what):
     if ret/256 > 1:
       raise EnvironmentError("%s not found" % (mysql_config.path,))
   return data
-mysql_config.path = "mysql_config"
+mysql_config.path = "/usr/local/mysql/bin/mysql_config"

 def get_config():
   import os, sys

編譯通過,我們來試試添加的read_timeout這個參數(shù)。

conn = MySQLdb.connect(host = DB_SERVER,user = DB_USERNAME,passwd = DB_PASSWORD,db = DB_NAME, port=int(DB_PORT), client_flag = 2, read_timeout = 10)

然后執(zhí)行語句前,你試著把mysql用gdb hang住10s后,python就會異常拋錯

OperationalError: (2013, 'Lost connection to MySQL server during query')
 >/home/hoterran/Projects/dbaas/trunk/dbtest.py(18)()
 >mydb.execute_sql(conn, sql)
(Pdb)
--Return--
> /home/hoterran/Projects/dbaas/trunk/dbtest.py(18)()->None
> mydb.execute_sql(conn, sql)
(Pdb)
OperationalError: (2013, 'Lost connection to MySQL server during query')
> <string>(1)<module>()->None


相關(guān)文章

  • pandas創(chuàng)建DataFrame的7種方法小結(jié)

    pandas創(chuàng)建DataFrame的7種方法小結(jié)

    這篇文章主要介紹了pandas創(chuàng)建DataFrame的7種方法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python從Excel讀取數(shù)據(jù)并使用Matplotlib繪制成二維圖像

    Python從Excel讀取數(shù)據(jù)并使用Matplotlib繪制成二維圖像

    本課程實現(xiàn)使用 Python 從 Excel 讀取數(shù)據(jù),并使用 Matplotlib 繪制成二維圖像。這一過程中,將通過一系列操作來美化圖像,最終得到一個可以出版級別的圖像。本課程對于需要書寫實驗報告,學(xué)位論文,發(fā)表文章,做報告的學(xué)員具有較大價值
    2023-02-02
  • Python 字符串轉(zhuǎn)換為整形和浮點類型的方法

    Python 字符串轉(zhuǎn)換為整形和浮點類型的方法

    今天小編就為大家分享一篇Python 字符串轉(zhuǎn)換為整形和浮點類型的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python中根據(jù)時間自動創(chuàng)建文件夾的代碼實現(xiàn)

    Python中根據(jù)時間自動創(chuàng)建文件夾的代碼實現(xiàn)

    這篇文章主要介紹了Python中根據(jù)時間自動創(chuàng)建文件夾的代碼實現(xiàn),這樣的話給工作帶來極大的便利,方便桌面文件按時間存放,具體實例代碼跟隨小編一起看看吧
    2021-10-10
  • TensorFlow中關(guān)于tf.app.flags命令行參數(shù)解析模塊

    TensorFlow中關(guān)于tf.app.flags命令行參數(shù)解析模塊

    這篇文章主要介紹了TensorFlow中關(guān)于tf.app.flags命令行參數(shù)解析模塊,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python spyder中讀取txt為圖片的方法

    python spyder中讀取txt為圖片的方法

    下面小編就為大家分享一篇python spyder中讀取txt為圖片的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 解決Python requests 報錯方法集錦

    解決Python requests 報錯方法集錦

    這篇文章主要介紹了解決Python requests 報錯方法集錦的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 基于Python實現(xiàn)子域名收集工具

    基于Python實現(xiàn)子域名收集工具

    在網(wǎng)絡(luò)安全領(lǐng)域中,發(fā)現(xiàn)和管理攻擊面絕對是一項必須的任務(wù),而對域名的尋找和分析是發(fā)現(xiàn)攻擊面的重要步驟,本文將使用Python編寫一個子域名收集,需要的可以參考下
    2024-02-02
  • python tornado使用流生成圖片的例子

    python tornado使用流生成圖片的例子

    今天小編就為大家分享一篇python tornado使用流生成圖片的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python-sys.stdout作為默認函數(shù)參數(shù)的實現(xiàn)

    python-sys.stdout作為默認函數(shù)參數(shù)的實現(xiàn)

    今天小編就為大家分享一篇 python-sys.stdout作為默認函數(shù)參數(shù)的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論

峨眉山市| 台山市| 金沙县| 维西| 湘乡市| 西藏| 游戏| 曲周县| 大荔县| 吉木萨尔县| 高密市| 三明市| 治多县| 奉节县| 磐石市| 那坡县| 通州区| 资溪县| 三都| 安多县| 靖安县| 华亭县| 含山县| 文山县| 栖霞市| 东乡族自治县| 利辛县| 无极县| 双城市| 禹城市| 尤溪县| 丰县| 宁化县| 台中县| 山阳县| 兴城市| 太和县| 临猗县| 永年县| 浦县| 平远县|