未知

gevent-helpers的Python项目详细描述


gevent-helpers包含在 使用gevent开发

gevent==1.0rc3兼容

fork()

在问题解决之前,gevent issue 154的解决方法。

阻塞检测器(超时=1,raise_exc=AlarmInterrupt,aggressive=True)

使用操作系统信号检测阻塞线程。

timeout=1是在考虑 线程被阻塞(注意:如果signal.setitimeritimer包是 可用,这可以是实数;否则将四舍五入为 最接近的整数)

raise_exc=AlarmInterrupt控制将引发哪个异常 在阻塞线程中。如果raise_exc为假ish,则不会有异常 引发(一条log.warning消息,包括堆栈跟踪,将始终是 发布)。注意:默认值AlarmInterruptBaseException,因此它不会被except Exception:捕获。 将被dirt.runloop捕获例如:

# Don't raise an exception, only log a warning message and stack trace:
BlockingDetector(raise_exc=False)

# Raise ``MyException()`` and lot a warning message:
BlockingDetector(raise_exc=MyException())

# Raise ``MyException("blocking detected after timeout=...")`` and log
# a warning message:
BlockingDetector(raise_exc=MyException)

aggressive=True确定阻塞检测器是否将重置 一旦被触发,或者是否会等到阻塞 线程在重置之前会屈服。例如,如果aggressive=Trueraise_exc=Falsetimeout=1,将为 每一秒都有一根线阻塞。但是,如果aggressive=False,则仅 在阻塞线程产生之前,将写入一条日志消息,此时 警报将被重置。

注意:BlockingDetector覆盖signal.SIGALRM处理程序和 不尝试保存上一个值。

例如:

>>> def spinblock():
...     while True:
...         pass
>>> gevent.spawn(BlockingDetector())
>>> gevent.sleep()
>>> spinblock()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in spinblock
  File ".../dirt/misc/gevent_.py", line 167, in alarm_handler
    raise exc
gevent_helpers.AlarmInterrupt: blocking detected after timeout=1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
virtualbox无法从java移动共享文件夹中的文件   java如何连接Android 4.3.5(GA)的apache HttpClient库?   片段中的java Recyclerview未立即显示警报对话框结果   javac(n,r)计算器程序不工作   java使用BooleanQuery还是编写更多索引?   如何在java中设置y/n循环?   java不兼容的通用通配符捕获   java如何在安卓xml中编写数据绑定时的三元操作条件   java如何使用FileDialog?   java如何创建单元测试来检测是否有人使用错误的编码编辑了文件?   java如何从唯一的字符串生成唯一的int?   java gradletomcatplugin:log4j:WARN找不到记录器的附加程序   java我的动态编程解决方案(Kefa和第一步)在codeforces中有什么问题?   java每天更新两个数据库,使它们都包含相同的有效数据集   java如何检查给定的时间是否在时间限制之间   java在单个json POST上保存父级和子级   java如何获取Solr字段类型