鉴于以下代码运行如下:
cli()
解析一些配置文件blabla()
打印一条消息" hi!" main()
cli()
也是SIGUSR2
以下是摘录:
def cli():
parser = argparse.ArgumentParser()
parser.add_argument("--logger-file", dest="logger_file", required=True, help="YAML logging configuration file")
parser.add_argument("--conf-file", dest="conf_file", required=True, help="app configuration file")
args = parser.parse_args()
setup_logger(args.logger_file)
commit_conf(args.conf_file)
def blabla():
while True:
logger.info("hi!")
time.sleep(60)
def recv_sigusr2(signum, stack):
cli()
def main():
cli()
signal.signal(signal.SIGUSR2, recv_sigusr2)
blabla()
if __name__ == "__main__":
main()
问题是:
blabla()
每次发送SIGUSR2
信号时都会运行,因为只有信号处理程序才会调用cli()
?cli()
的运行(不调用blabla()
)?答案 0 :(得分:0)
Python doc说time.sleep(secs)
:
暂停执行当前线程达到给定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。 实际暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()。此外,由于系统中其他活动的安排,暂停时间可能比任意数量的请求时间长。
因此,每次收到SIGUSR2时都不会调用blabla
,但由于sleep
中断,循环的另一次迭代会立即启动。