python信号处理的优点,python – Pylons中的信号处理

在Python的Pylons项目中,尝试通过SIGUSR1信号更新内存结构,但处理信号后服务器遇到'Interruptedsystemcall'异常。问题源于Python将操作系统错误转化为异常,而EINTR应该导致系统调用重试。解决方案涉及修改Python标准库,添加对EINTR的处理,但这并不简单。提供了一个开源代码库来解决这个问题,可以避免大量工作。
摘要由CSDN通过智能技术生成

我有一个pylons项目,我需要定期更新一些内存中的结构.这应该按需完成.我决定为此设计一个信号处理程序.用户将SIGUSR1发送到主塔架线程,并由项目处理.

这工作除了处理信号后,服务器崩溃以下异常:

File "/usr/lib/python2.6/SocketServer.py", line 264, in handle_request

fd_sets = select.select([self], [], [], timeout)

select.error: (4, 'Interrupted system call')

有可能解决这个问题吗?

TIA.

解决方法:

是的,有可能,但使用库存Python库并不容易.这是因为Python将所有操作系统错误转换为异常.但是,EINTR应该真正导致重用所使用的系统调用.无论何时开始在Python中使用信号,您都会偶尔看到此错误.

我有code that fixes this(SafeSocket),通过分支Python模块并添加该功能.但它需要在使用系统调用的任何地方添加.所以这是可能的,但并不容易.但是你可以使用我的开源代码,它可以节省你多年的工作.

标签:python,signals,pylons

来源: https://codeday.me/bug/20190614/1237510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值