跳转到主要内容

使用multiprocessing包实现的deferToProcess。

项目描述

简介

Python的全局解释器锁(GIL)通过锁定所有纯Python代码,对多处理器性能提出了一些限制。虽然twisted中的线程支持很出色,但GIL实际上将进程绑定到单个CPU,从而限制了性能。

为了绕过GIL,Python从2.6版本开始引入了multiprocessing包。multiprocessing包已回滚到Python 2.4和2.5,并可在Python包索引(http://pypi.python.org/pypi)中找到。multiprocessing包提供了与Python提供的线程库类似的接口,但它使用进程而不是线程。

本包twisted.internet.processes实现了对多进程库的封装,并提供了一个deferToProcess方法,其工作方式与deferToThread相同。

实现

当第一次调用deferToThread时,与在正常reactor中创建线程池的方式相同,在reactor上创建了一个进程池。

最初的目标是使用非阻塞代码和来自多进程库的回调来提供deferToProcess方法。不幸的是,multiprocessing.Pool.apply_async在失败时不会调用回调。为了保留失败回调,使用来自异步结果集multiprocessing.pool.AsyncResult的get方法,通过将其包装在deferToThread的调用中来使用。在等待来自单独进程的调用结果时,线程会被阻塞。

使用multiprocessing.Pool.apply_async来延迟到进程对用户代码施加一些额外要求。所有参数以及函数本身都必须能够被Python的cPickle模块序列化。

许可证

版权所有 2009 德克萨斯A&M大学

根据Apache许可证版本2.0(“许可证”);除非适用法律要求或经书面同意,否则不得使用此文件,除非符合许可证。您可以在以下位置获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证中规定的特定语言的权限和限制,请参阅许可证。

变更日志

1.0b1 2009/08/24

  • 初始版本

  • 由于2.6.2.1中的日志记录错误,锁定在multiprocessing 2.6.1.1或以下版本

  • 尚未进行测试

  • deferToProcess基于deferToThread包装的阻塞调用

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

twisted.internet.processes-1.0b1.tar.gz (3.8 kB 查看哈希值)

上传时间

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面