多个子流程中的Pyhtion 2.7记录器不会将信息记录到日志文件中

时间:2019-07-26 01:36:16

标签: python-2.7 logging process multiprocessing subprocess

我正在使用“ multiprocessing.Process”启动多个子过程。每个子过程都是相同的python脚本,该脚本实例化Logger并将不同级别写入日志文件。只要是相同的脚本,它就会在每个子进程中使用相同的名称创建Logger。

每个子进程还具有唯一的ID,并记录包括该唯一ID的信息。

我发现该日志文件完全缺少一些ID,即整个子进程都没有日志输出。

试图了解原因。在线搜索花费了几个小时,但未发现任何类似的案例。

任何想法/提示都会有所帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

答案在这里

尽管日志记录是线程安全的,并且支持在单个进程中从多个线程登录到单个文件,但是不支持从多个进程向单个文件登录,因为没有标准的方法来序列化对单个进程的访问Python中跨多个进程的文件。如果您需要从多个进程登录到单个文件,执行此操作的一种方法是使所有进程都登录到SocketHandler,并有一个单独的进程来实现一个套接字服务器,该服务器从套接字读取并记录到文件。 (如果愿意,可以在现有进程之一中指定一个线程来执行此功能。)本节将更详细地介绍此方法,并包括一个有效的套接字接收器,可用作您适应于您的起点。自己的应用程序。

如果您正在使用包含多处理模块的最新版本的Python,则可以编写自己的处理程序,该处理程序使用此模块中的Lock类来序列化对进程的文件访问。现有的FileHandler和子类目前不使用多重处理,尽管将来可能会使用。请注意,目前,多处理模块并未在所有平台上都提供工作锁定功能(请参见https://bugs.python.org/issue3770)。

https://docs.python.org/2/howto/logging-cookbook.html#logging-cookbook