小编Ala*_*oni的帖子

Python日志记录模块发出错误的时区信息

我遇到了Python 2.7日志记录模块的问题.我的系统是Ubuntu 14.04 64bit,我住在意大利(目前UTC + 1,没有夏令时); 系统正确配置.

我想在当前时区发出记录行,完成正确的时区偏移信息.

请考虑以下代码段:

#!/usr/bin/env python
import sys
print sys.version_info
import commands
print "System time: %s" % commands.getoutput("date --rfc-3339=seconds")

import logging
import datetime
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout, 
                        format="%(asctime)s:" + logging.BASIC_FORMAT,
                         datefmt="%Y-%m-%dT%H:%M:%S%z")

logger = logging.getLogger()
logger.info("Something happened")
Run Code Online (Sandbox Code Playgroud)

结果如下:

sys.version_info(major=2, minor=7, micro=6, releaselevel='final', serial=0)
System time: 2015-01-09 11:21:44+01:00
2015-01-09T11:21:44+0000:INFO:root:Something happened
Run Code Online (Sandbox Code Playgroud)

因此,系统知道正确的时间和偏移量,而Python似乎错误的时间.

在datetime docs中,据说对于strftime中的%z,结果是"格式为+ HHMM或-HHMM的UTC偏移量(如果对象是天真的,则为空字符串)".

所以,我希望得到以下结果之一:

  1. 记录模块想要以UTC身​​份登录,所以我会得到类似10:21.44和+0000偏移量的东西;
  2. 日志记录模块想要登录本地时间,所以我会得到类似11:21:44和+01000偏移量的东西;
  3. 日志记录模块提供了天真的日期时间对象,我们在偏移量上完全没有.

相反,在这里,我似乎得到了一个不可预测的 - 而且显然是错误的 - 结果.这是怎么回事?是否有可能配置日志模块,做我想做的无覆盖logging.Formatter对象的转换器功能(其中,当然,我可以做任何我喜欢,但是这看起来显然是个错误给我)?

python logging datetime python-2.7

9
推荐指数
2
解决办法
8553
查看次数

Python集合ValuesView abc:为什么它不继承Iterable?

我刚刚在我的项目中检查了一些关于ABC的文档,我需要做一些类型相关的工作.这些是关于ValuesView类型的官方文档,在Python 2和3中:

https://docs.python.org/2/library/collections.html#collections.ValuesView https://docs.python.org/3/library/collections.abc.html

这是源代码(Python 2,但在Python 3中也是如此)

https://hg.python.org/releases/2.7.11/file/9213c70c67d2/Lib/_abcoll.py#l479

我对ValuesView接口感到非常困惑,因为从逻辑角度来看它应该继承自Iterable,恕我直言(它甚至得到了__iter__ Mixin方法); 相反,文档说它只是从MappingView继承而来,它继承自Sized,它不继承自Iterable.

所以我解雇了我的2.7翻译:

>>> from collections import Iterable
>>> d = {1:2, 3:4}
>>> isinstance(d.viewvalues(), Iterable) 
True
>>>
Run Code Online (Sandbox Code Playgroud)

毕竟,它看起来是可迭代的,因为Iterable自己的子类钩子.

但是我不明白为什么ValuesView没有明确的Iterable.其他ABC,如Sequence或Set,是明确可迭代的.这背后有一些神秘的原因,或者它只是一个文档+实现的缺点,一个很少使用的功能?

编辑:ValuesView从Python 3.7开始按预期工作.似乎只是疏忽.

python collections abc

7
推荐指数
1
解决办法
627
查看次数

模拟阻塞系统调用中的进程

我正在尝试测试在受控环境中难以重现的行为.

使用案例:Linux系统; 通常是Redhat EL 5或6(我们刚刚开始使用RHEL 7和systemd,所以它目前已超出范围).

在某些情况下我需要重新启动服务.我们用来停止服务的脚本通常运行得很好; 它将SIGTERM发送到进程,该进程旨在处理它; 如果这个过程没有超时(通常是一两分钟)的脚本发送SIGKILL内处理SIGTERM,然后等待几分钟就能完成.

问题是:在某些(罕见)情况下,进程在SIGKILL之后不会退出; 这通常发生在它严重停留在系统调用上时,可能是因为内核级问题(损坏的文件系统,或者没有工作的NFS文件系统,或者同样糟糕的需要手动干预的东西).

当脚本没有意识到"旧"进程实际上没有退出并且在旧的进程仍在运行时启动了新进程时,出现了一个错误; 我们正在通过一个更强大的锁定系统解决这个问题(所以至少新进程如果旧的运行时不会启动),但我发现很难测试整个系统,因为我还没有找到一种方法来模拟困难的过程.

所以,问题是:

即使作为特权用户,如何手动模拟在向其发送SIGKILL时不会退出的进程?

linux process linux-kernel

4
推荐指数
1
解决办法
1617
查看次数