在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ python 單例模式

python 單例模式

通過(guò)DBUtils.PooledDB編寫(xiě)一個(gè)類(lèi),包含創(chuàng)建地址池和執(zhí)行sql兩個(gè)功能,如果保證其他程序import調(diào)用這個(gè)類(lèi)的時(shí)候不會(huì)重復(fù)創(chuàng)建地址池??? 單例模式好像沒(méi)有用

回答
編輯回答
抱緊我

上代碼:

地址池創(chuàng)建

class Mysql(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = super(Mysql, cls).__new__(cls, *args, **kwargs)
        return cls.__instance

    def __init__(self):
        self.mysql = PooledDB(creator=pymysql, mincached=10, maxcached=20,
                              host='127.0.0.1', port=3306, user='chinamap', passwd='p-0p-0p-0',
                              db='operation', charset="utf8")

    def getAll(self, sql):
        print(id(self.mysql))
        _conn = self.mysql.connection()
        _cursor = _conn.cursor()
        _cursor.execute(sql)
        result = _cursor.fetchall()
        _cursor.close()
        _conn.close()
        return result

另外兩個(gè) 引用的代碼

from tt4 import Mysql
import time
mysql = Mysql()
print(id(mysql))
ssql= "select * from tz_ioip"
while True:
    result = mysql.getAll(ssql)
    print(result)
    time.sleep(5)

圖片描述
圖片描述

2018年5月27日 07:06
編輯回答
網(wǎng)妓

仔細(xì)看了下問(wèn)題。
題主想在兩個(gè)進(jìn)程之間共享一個(gè)對(duì)象。
要知道,不同的進(jìn)程是各自有專(zhuān)用的虛擬地址空間,互不干擾的。
所以要共享一個(gè)對(duì)象,需要多進(jìn)程模塊multiprocessing來(lái)實(shí)現(xiàn)。

2018年6月3日 09:19
編輯回答
抱緊我

你說(shuō)的是其他程序,,兩個(gè)不同程序進(jìn)程都不一樣,你兩個(gè)調(diào)用他就不是單例。
按照你的代碼看你就是一個(gè)py文件寫(xiě)的Mysql類(lèi),想導(dǎo)入并實(shí)例化一個(gè)單例,我沒(méi)細(xì)看你的代碼,其實(shí)你可以在Mysql文件下面 mysql = Mysql()然后其他文件import mysql,模塊就是單例

2017年6月22日 09:38
編輯回答
任她鬧

在python的import機(jī)制里,一個(gè)模塊只會(huì)被導(dǎo)入一次,除了手動(dòng)進(jìn)行reload操作,因此你問(wèn)題中的重復(fù)創(chuàng)建地址池,應(yīng)該是由其他原因產(chǎn)生的,不是因?yàn)槟K被多個(gè)文件import導(dǎo)致的。

2017年1月25日 09:23