小编and*_*and的帖子

导入__init__.py和`import as`语句

我遇到了在包的模块中导入__init__.py和使用import as绝对导入的问题.

我的项目有一个子包,在其中__init__.py我将一个类从一个模块"提升"到带有from import as语句的子包级别.该模块使用绝对导入从该子包导入其他模块.我收到这个错误AttributeError: 'module' object has no attribute 'subpkg'.

结构:

pkg/
??? __init__.py
??? subpkg
?   ??? __init__.py
?   ??? one.py
?   ??? two_longname.py
??? tst.py
Run Code Online (Sandbox Code Playgroud)

pkg/__ init__.py为空.

pkg/subpkg/__ init__.py:

from pkg.subpkg.one import One
Run Code Online (Sandbox Code Playgroud)

pkg/subpkg/one.py:

import pkg.subpkg.two_longname as two

class One(two.Two):
    pass
Run Code Online (Sandbox Code Playgroud)

pkg/subpkg/two_longname.py:

class Two:
    pass
Run Code Online (Sandbox Code Playgroud)

pkg/tst.py:

from pkg.subpkg import One

print(One)
Run Code Online (Sandbox Code Playgroud)

输出:

$ python3.4 -m pkg.tst
Traceback (most recent …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

19
推荐指数
1
解决办法
5702
查看次数

Python线程和原子操作

我想用同步stop()方法实现一个线程.

我见过这样的版本:

class Thread1:
    def __init__(self):
        self._stop_event = threading.Event()
        self._thread = None

    def start(self):
        self._thread = threading.Thread(target=self._run)
        self._thread.start()

    def stop(self):
        self._stop_event.set()
        self._thread.join()

    def _run(self):
        while not self._stop_event.is_set():
            self._work()

    def _work(self):
        print("working")
Run Code Online (Sandbox Code Playgroud)

但我已经读过原子操作是线程安全的,在我看来它可以在没有的情况下完成Event.所以我想出了这个:

class Thread2:
    def __init__(self):
        self._working = False
        self._thread = None

    def start(self):
        self._working = True
        self._thread = threading.Thread(target=self._run)
        self._thread.start()

    def stop(self):
        self._working = False
        self._thread.join()

    def _run(self):
        while self._working:
            self._work()

    def _work(self):
        print("working")
Run Code Online (Sandbox Code Playgroud)

它认为在C中类似的实现被认为是不正确的,因为编译器可以放入_working寄存器(甚至优化),工作线程永远不会知道变量已经改变.可以在Python中发生类似的事情吗?这个实现是否正确?我的目的不是完全避免事件或锁定,只是想了解这个原子操作的事情.

python multithreading

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

使用 prometheus 和 grafana 跟踪事件

有一篇文章“跟踪每个版本”讲述了在每个代码部署的图表上显示一条垂直线。他们正在使用石墨。我想用 Prometheus 2.2 和 Grafana 5.1 做类似的事情。更具体地说,我想在图表上显示一个“应用程序启动”事件。

Grafana 注释似乎是合适的机制,但我无法弄清楚要使用哪种类型的普罗米修斯指标以及如何查询它。

grafana prometheus

4
推荐指数
2
解决办法
6499
查看次数

标签 统计

python ×2

grafana ×1

multithreading ×1

prometheus ×1

python-3.x ×1