Python 服务 - 写入带有时间戳的文件名

Python service - writing filename with timestamp

我写了一个 Python 脚本,它将 运行 无限期地。它使用 PyInotify 监视目录,并使用 Multiprocessing 模块 运行 通过外部脚本在这些目录中创建的任何新文件。这一切都很好。

我遇到的问题是将输出写入文件。我选择的文件名使用当前日期(使用 datetime.now)并且理论上应该每小时滚动一次。

now = datetime.now()
filename = "/data/db/meta/%s-%s-%s-%s.gz" % (now.year, now.month, now.day, now.hour)
with gzip.open(filename, 'ab') as f:
    f.write(json.dumps(data) + "\n")
    f.close() #Unsure if I need this, here for debug

不幸的是,当时间开始时——输出停止并且永远不会 returns。没有抛出异常,它只是停止工作。

total 2.4M
drwxrwxr-x 2 root root 4.0K Sep  8 08:01 .
drwxrwxr-x 4 root root  12K Aug 29 16:04 ..
-rw-r--r-- 1 root root 446K Aug 29 16:59 2016-8-29-16.gz
-rw-r--r-- 1 root root 533K Aug 30 08:59 2016-8-30-8.gz
-rw-r--r-- 1 root root  38K Sep  7 10:59 2016-9-7-10.gz
-rw-r--r-- 1 root root  95K Sep  7 14:59 2016-9-7-14.gz
-rw-r--r-- 1 root root 292K Sep  7 15:59 2016-9-7-15.gz #Manually run
-rw-r--r-- 1 root root 834K Sep  8 08:59 2016-9-8-8.gz

Those files aren't really owned by root, just changed them for public consumption

如您所见,所有文件时间戳都在 :59 结束,下一个小时永远不会发生。

这样做有什么需要注意的吗?有没有什么我无限期地缺少 运行 宁 Python 脚本?


看完之后。好像 PyInotify 是我的问题。 看这里 (https://unix.stackexchange.com/questions/164794/why-doesnt-inotifywatch-detect-changes-on-added-files)

我调整了你的代码,每分钟更改一次文件名,这大大加快了调试速度,但仍然在检验假设。

import datetime
import gzip, time
from os.path import expanduser
while True:
    now = datetime.datetime.now()
    filename = expanduser("~")+"/%s-%s-%s-%s-%s.gz" % (now.year, now.month, now.day, now.hour, now.minute)
    with gzip.open(filename, 'a') as f:
        f.write(str(now) + "\n")
        f.write("Data Dump here" + "\n")
    time.sleep(10)

这似乎 运行 没有问题。更改我的电脑的时区也被拾起并处理。鉴于上述情况,我怀疑您的错误可能出在其他地方,并且需要在关键点对值进行一些明智的调试打印。尝试使用上面更细化的文件名来加快调试速度。