python-进程与线程五

一、进程日志

# 进程日志
import multiprocessing
import logging
import sys


def worker():
    print('I am working....')
    sys.stdout.flush()
    
    
if __name__ == '__main__':
    multiprocessing.log_to_stderr()  # 设置日志输出到控制台
    logger = multiprocessing.get_logger()
    logger.setLevel(logging.INFO)    # 设置输出日志的级别
    p = multiprocessing.Process(target=worker)
    p.start()
    p.join()

结果:
I am working....
[INFO/Process-1] child process calling self.run()
[INFO/Process-1] process shutting down
[INFO/Process-1] process exiting with exitcode 0
[INFO/MainProcess] process shutting down

二、守护进程

# 守护进程:只要主进程结束了,守护进程不管执行完毕否,都要退出
# 非守护进程:主进程结束了,守护进程可以继续执行,直到结束

import multiprocessing
import time, logging
import sys


def daemon():  # 守护进程的任务
    p = multiprocessing.current_process()  # 获取当前进程对象
    print('Starting:', p.name, p.pid)  # 打印进程名字
    sys.stdout.flush()  # 将缓冲区数据写入终端(防止数据太少而不打印)
    time.sleep(2)
    print('Exiting :', p.name, p.pid)
    sys.stdout.flush()


def non_daemon():  # 非守护进程的任务
    p = multiprocessing.current_process()
    print('Starting:', p.name, p.pid)
    sys.stdout.flush()
    print('Exiting :', p.name, p.pid)
    sys.stdout.flush()


if __name__ == '__main__':
    multiprocessing.log_to_stderr()  # 设置日志输出到控制台
    logger = multiprocessing.get_logger()
    logger.setLevel(logging.DEBUG)  # 设置输出日志的级别
    d = multiprocessing.Process(name='daemon', target=daemon)
    d.daemon = True  # 把d进程设定为守护进程,默认是False
    n = multiprocessing.Process(name='non-daemon', target=non_daemon)
    n.daemon = False  # 把n进程设定为非守护进程,默认是False
    d.start()
    time.sleep(1)
    n.start()
    # d.join(1)
    # n.join()
    print('d.is_alive()', d.is_alive())  # 打印这个进程是否是活动状态
    print("n.is_alive()", n.is_alive())  # 打印这个进程是否是活动状态
    print("main Process end!")


结果:
[INFO/daemon] child process calling self.run()
Starting: daemon 116912
d.is_alive() True
n.is_alive() True
main Process end!
[INFO/MainProcess] process shutting down
[DEBUG/MainProcess] running all "atexit" finalizers with priority >= 0
[INFO/MainProcess] calling terminate() for daemon daemon
[INFO/MainProcess] calling join() for process non-daemon
Starting: non-daemon 115272
Exiting : non-daemon 115272
[INFO/non-daemon] child process calling self.run()
[INFO/non-daemon] process shutting down
[DEBUG/non-daemon] running all "atexit" finalizers with priority >= 0
[DEBUG/non-daemon] running the remaining "atexit" finalizers
[INFO/non-daemon] process exiting with exitcode 0
[INFO/MainProcess] calling join() for process daemon
[DEBUG/MainProcess] running the remaining "atexit" finalizers

Process finished with exit code 0

猜你喜欢

转载自www.cnblogs.com/su-sir/p/12584394.html
今日推荐