python – 处理队列的中断系统调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 处理队列的中断系统调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1219字,纯文字阅读大概需要2分钟。
内容图文
我们突然开始在Queue操作上看到“Interrupted system call”,如下所示:
Exception in thread Thread-2:
Traceback (most recent call last):
[ . . . ]
result = self.pager.results.get(True, self.WAIT_SECONDS)
File "/usr/lib/python2.5/site-packages/processing-0.52-py2.5-linux-x86_64.egg/processing/queue.py", line 128, in get
if not self._poll(block and (deadline-time.time()) or 0.0):
IOError: [Errno 4] Interrupted system call
这是最近有安全更新的Fedora 10 / Python 2.5机器.在此之前,我们的软件运行了大约一年没有发生任何事故,现在它每天都在崩溃.
捕获此异常并重试Queue操作是否正确/必要?
我们没有设置任何信号处理程序,但这是一个Tkinter应用程序可能它设置了一些.清除SIGINT处理程序是否安全,是否可以解决问题?谢谢.
最佳答案:
基于comp.lang.python上的this thread和Dan Stromberg的this reply,我写了一个RetryQueue,它是Queue的替代品,它为我们完成了这项工作:
from multiprocessing.queues import Queue
import errno
def retry_on_eintr(function, *args, **kw):
while True:
try:
return function(*args, **kw)
except IOError, e:
if e.errno == errno.EINTR:
continue
else:
raise
class RetryQueue(Queue):
"""Queue which will retry if interrupted with EINTR."""
def get(self, block=True, timeout=None):
return retry_on_eintr(Queue.get, self, block, timeout)
内容总结
以上是互联网集市为您收集整理的python – 处理队列的中断系统调用全部内容,希望文章能够帮你解决python – 处理队列的中断系统调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。