多进程的日志和多线程的日志有一点区别。原因是 Python 的 logging 包不支持进程共享锁,所以来自不同的进程的日志可能会混在一起。我们尝试一下在上边的例子里加一个基础日志。下边是代码:
import loggingimport multiprocessingfrom multiprocessing import Process, Lockdef printer(item, lock): """ Prints out the item that was passed in """ lock.acquire() try: print(item) finally: lock.release()if __name__ == '__main__': lock = Lock() items = ['tango', 'foxtrot', 10] multiprocessing.log_to_stderr() logger = multiprocessing.get_logger() logger.setLevel(logging.INFO) for item in items: p = Process(target=printer, args=(item, lock)) p.start()
记录日志最简单的方法是将所有的日志发送给 stderr 。我们可以通过调用函数 log_to_stderr 来实现。然后我们调用 get_logger 函数得到记录器(logger),并把日志级别设置为 INFO。剩下的代码和原来一样。这里要说明一下,我并没有用 join() 函数。相反, 父线程在退出的时候要显式地调用 join()。
当你运行上边的代码,会得到像下面这样的输出:
[INFO/Process-1] child process calling self.run() tango [INFO/Process-1] process shutting down [INFO/Process-1] process exiting with exitcode 0 [INFO/Process-2] child process calling self.run() [INFO/MainProcess] process shutting down foxtrot [INFO/Process-2] process shutting down [INFO/Process-3] child process calling self.run() [INFO/Process-2] process exiting with exitcode 0 10 [INFO/MainProcess] calling join() for process Process-3 [INFO/Process-3] process shutting down [INFO/Process-3] process exiting with exitcode 0 [INFO/MainProcess] calling join() for process Process-2
现在你如果想把日志保存到硬盘,其实还有有些复杂的。你可以参考 Python 的官方实例。
转载于:https://blog.51cto.com/smileyouth/1903490