相关疑难解决方法(0)

如果__name__ =="__ main__":怎么办?

怎么if __name__ == "__main__":办?

# Threading example
import time, thread

def myfunction(string, sleeptime, lock, *args):
    while True:
        lock.acquire()
        time.sleep(sleeptime)
        lock.release()
        time.sleep(sleeptime)

if __name__ == "__main__":
    lock = thread.allocate_lock()
    thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
    thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
Run Code Online (Sandbox Code Playgroud)

python program-entry-point idioms namespaces python-module

5545
推荐指数
36
解决办法
261万
查看次数

在Python中创建单例

这个问题不是讨论单身人士设计模式是否可取,反模式,还是任何宗教战争,而是讨论如何以最蟒蛇的方式在Python中最好地实现这种模式.在这种情况下,我将"最pythonic"定义为表示它遵循"最小惊讶原则".

我有多个类可以成为单例(我的用例是记录器,但这并不重要).当我可以简单地继承或装饰时,我不希望在添加gumph的几个类中混乱.

最好的方法:


方法1:装饰者

def singleton(class_):
    instances = {}
    def getinstance(*args, **kwargs):
        if class_ not in instances:
            instances[class_] = class_(*args, **kwargs)
        return instances[class_]
    return getinstance

@singleton
class MyClass(BaseClass):
    pass
Run Code Online (Sandbox Code Playgroud)

优点

  • 装饰器的添加方式通常比多重继承更直观.

缺点

  • 虽然使用MyClass()创建的对象将是真正的单例对象,但MyClass本身是一个函数,而不是一个类,因此您无法从中调用类方法.也是为了m = MyClass(); n = MyClass(); o = type(n)();那时m == n && m != o && n != o

方法2:基类

class Singleton(object):
    _instance = None
    def __new__(class_, *args, **kwargs):
        if not isinstance(class_._instance, class_):
            class_._instance = object.__new__(class_, *args, **kwargs)
        return class_._instance

class MyClass(Singleton, …
Run Code Online (Sandbox Code Playgroud)

python singleton metaclass decorator base-class

829
推荐指数
14
解决办法
29万
查看次数

尽早设置日志记录:在导入期间捕获警告

我希望通过我希望处理日志的方式来处理所有警告.甚至在导入库期间发出的这些.

这意味着必须在导入库之前完成日志记录的配置.

搜索一段时间之后,我认为在自定义中配置日志记录sitecustomize.py可能是一种解决方案

sitecustomize.py不知何故,黑魔法只有少数人知道它,甚至更少的人使用它.

有没有更明显的方法来确保在导入库之前完成我的日志配置?

不幸的是,似乎无法通过环境变量配置日志记录.

更新

根据我的观点,我没有得到任何可以接受的答案.我认为你需要将登录分为两个责任区:

  • 环境:设置日志:哪种格式,哪些文件...
  • 代码:使用日志记录.发出信息,警告和错误消息.

一旦第一行代码被python解释器执行,区域"环境"就对代码负责.现在做任何配置都为时已晚.我想看看将日志记录设置为调用python解释器的一部分.

一种解决方案可以是环境变量:

PYTHON_LOGGING_CONFIG=/path-to-env/etc/config.yaml
Run Code Online (Sandbox Code Playgroud)

或者是翻译的参数:

python --logging-config=path-to-env/etc/config.yaml script.py
Run Code Online (Sandbox Code Playgroud)

python logging

5
推荐指数
1
解决办法
245
查看次数