我可以使用Python异常来处理守护进程的SIGHUP信号的后果吗?

2024-09-27 07:26:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python编写一个简单的小文件同步守护进程,以实现主计算机和辅助计算机之间的同步文件系统。大部分的重担都是由rsync完成的。在

在主端,它周期性地调用rsync并在重复之前休眠几秒钟。在辅助端,它生成rsyncd子流程.Popen()并执行.wait()直到它退出。不过,我想用SIGHUP触发守护进程的重新配置。我想知道处理清理工作最好的方法是什么。在

我最初的想法是让信号处理程序引发一个可以触发清理的异常:

def signal_handler(signum, frame):
    raise fsync_config_exception

以及:

^{pr2}$

但是我得到一个:

we got <type 'exceptions.TypeError'> with __init__() takes exactly 2 arguments (1 given) instead

而不是预期的fsync_config_异常。有人对解决这类问题的最佳方法有什么建议吗?我在可怕地滥用异常,试图从信号上下文中提出它们?在


Tags: 文件方法config进程计算机流程rsyncpopen
1条回答
网友
1楼 · 发布于 2024-09-27 07:26:17

您应该引发一个fsync_config_exception实例,而不是类。(使用其__init__()签名实例化它)

但是,我不建议以这种方式引发异步异常。您很难保证只有在可以正确处理异常时才会引发异常。这也不是一个好的习惯模式,因为您不能在Python解释器上下文中中断阻塞C扩展调用….(但这可能不是您的问题?)在

在信号处理程序中,我会(掩盖细节,不知道这是否适合您的情况):

  • 设置状态,注意当前迭代已被中断-如果需要特殊清理,请使用此状态进行标记
  • 在信号处理程序中,终止正在等待的进程
  • 在等待之后添加另一个条件检查,看看进程是否被信号终止(对状态变量进行额外检查,注意是否收到SIGHUP)
  • 做你该做的事来回应这个发现

相关问题 更多 >

    热门问题