Python服务 - 使用时间戳编写文件名

时间:2016-09-08 14:41:51

标签: python multiprocess pyinotify

我编写了一个无限期运行的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

不幸的是,当小时滚动时 - 输出停止并且永不返回。没有异常被抛出,它只是停止工作。

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
  
    

这些文件并非真正归root用户所有,只是将其更改为公共消费

  

如您所见,所有文件的时间戳结束于:59,下一个小时从未发生过。

这样做时我应该考虑一些事项吗?是否有一些我无法无限期地运行Python脚本的东西?

偷看之后。似乎PyInotify是我的问题。 见这里(https://unix.stackexchange.com/questions/164794/why-doesnt-inotifywatch-detect-changes-on-added-files

1 个答案:

答案 0 :(得分:2)

我调整了你的代码,每分钟更改一次文件名,这样可以加快调试速度,但仍会测试假设。

login_path

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