目次

目次

Pythonでシングルトンパターン書いてみる

アバター画像
福山
アバター画像
福山
最終更新日2017/05/11 投稿日2017/05/11

ディレクトリ構成は前回と同じ構成となります。

コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from configparser import ConfigParser

class App(object):
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = object.__new__(cls)
            cls._instance.config = ConfigParser()
            cls._instance.config.read('./sample.ini')

        return cls._instance

def main():
    app = App()
    print('名前は', app.config['cat']['name'])
    print('名前は', app.config['dog']['name'])

    app2 = App()
    print('名前は', app2.config['cat']['name'])
    print('名前は', app2.config['dog']['name'])

    print(app is app2)

if __name__ == '__main__':
    main()

設定ファイル

[dog]
name = inu

[cat]
name = neko

出力

名前は neko
名前は inu
名前は neko
名前は inu
True

マルチスレッドで動かす場合、これで問題ないか?と意見をもらいまして マルチスレッドに対応したコード書いてみました。

コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import threading
from configparser import ConfigParser

class App(object):
    _instance = None
    _lock = threading.Lock()

    def __new__(cls):
        with cls._lock:
            if cls._instance is None:
                cls._instance = object.__new__(cls)
                cls._instance.config = ConfigParser()
                cls._instance.config.read('./sample.ini')

        return cls._instance
アバター画像

福山

最近技術触れてないかも

目次