使用多处理包的延迟处理的一种实现。
twisted.internet.processes的Python项目详细描述
简介
python全局解释器锁(gil)对multi 通过锁定所有纯python代码来提高处理器性能。虽然 twisted中的线程支持非常出色,gil阻碍了性能 通过本质上将进程绑定到单个cpu。
为了绕过gil,python引入了多处理包 从2.6版开始。多处理程序包已被移植到 python 2.4和2.5,可从python包索引获得 (http://pypi.python.org/pypi)。多处理包提供了类似的 与python提供的线程库的接口,除了它使用 进程而不是线程。
这个包twisted.internet.processes在 多处理库并提供一个方法defertoprocess 以与deferToThread相同的方式。
实施
在reactor上创建进程池的方式与线程相同 当第一次调用deferToThread时,池在正常的反应器中创建。
最初,目标是使用非阻塞代码和 提供延迟处理方法的多处理库。不幸的是, multiprocessing.pool.apply_async在事件中不调用回调 失败的原因。为了保留失败回调,来自 包装使用异步结果集multiprocessing.pool.asyncResult 它在调用deferToThread时。线程在等待 在单独进程中调用的结果。
使用multiprocessing.pool.apply_async遵从某个进程会导致 用户代码的附加要求。所有参数和函数本身 必须可由python cpickle模块进行pickle。
许可证
版权所有2009德克萨斯农工大学
根据apache许可证2.0版(以下简称“许可证”)授权;您不能使用 此文件与许可证不符。您可以获得 许可证位于
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则软件将被分发 根据许可证,是按“原样”分发的,没有保证或 任何形式的条件,无论是明示的还是默示的。查看许可证 管理许可下的权限和限制的特定语言。
更改日志
1.0b12009/08/24
- 初始版本
- 由于登录2.6.2.1时出现错误,已锁定到多处理2.6.1.1或更低版本
- 尚未测试
- 基于包在deferToThread中的阻塞调用的deferToprocess