我正在用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_异常。有人对解决这类问题的最佳方法有什么建议吗?我在可怕地滥用异常,试图从信号上下文中提出它们?在
您应该引发一个
fsync_config_exception
实例,而不是类。(使用其__init__()
签名实例化它)但是,我不建议以这种方式引发异步异常。您很难保证只有在可以正确处理异常时才会引发异常。这也不是一个好的习惯模式,因为您不能在Python解释器上下文中中断阻塞C扩展调用….(但这可能不是您的问题?)在
在信号处理程序中,我会(掩盖细节,不知道这是否适合您的情况):
相关问题 更多 >
编程相关推荐