跳转到主要内容

Python中的更优多进程和多线程

项目描述

关于Multiprocess

multiprocessmultiprocessing 的分支。 multiprocess 通过使用 dill 提供增强的序列化功能,扩展了 multiprocessingmultiprocess 利用 multiprocessing 支持使用Python标准库的 threading 模块的API来生成进程。 multiprocessing 自Python 2.6以来作为标准库的一部分分发。

multiprocesspathos 的一部分,这是一个用于异构计算的Python框架。 multiprocess 正在积极开发中,因此任何用户反馈、错误报告、评论或建议都将非常受赞赏。问题列表位于 https://github.com/uqfoundation/multiprocess/issues,维护着旧的列表 https://uqfoundation.github.io/project/pathos/query

主要功能

multiprocess 可以实现

  • 使用管道或多生产者/多消费者队列在进程之间传输对象

  • 使用服务器进程或(对于简单数据)共享内存在进程间共享的对象

multiprocess 提供以下功能

  • threading 中所有同步原语的对等函数

  • 一个 Pool 类,便于将任务提交给工作进程

  • 使用 dill 提高序列化功能

当前版本

multiprocess 的最新发布版本可在以下位置获取

http://pypi.ac.cn/project/multiprocess

multiprocess 采用 3 条款 BSD 许可证发布,并且是 multiprocessing 的分支。

开发版本

您可以在以下位置获取包含所有最新功能的最新开发版本

https://github.com/uqfoundation

如果您有新的贡献,请提交一个拉取请求。

安装

multiprocess 可以使用 pip 安装

$ pip install multiprocess

对于 Python 2,需要 C 编译器从源代码构建包含的扩展模块。Python 3 和二进制安装不需要 C 编译器。

需求

multiprocess 需要

  • python(或 pypy),>=3.8

  • setuptools>=42

  • dill>=0.3.9

基本用法

multiprocess.Process 类遵循 threading.Thread 的 API。例如

from multiprocess import Process, Queue

def f(q):
    q.put('hello world')

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=[q])
    p.start()
    print (q.get())
    p.join()

提供同步原语,如锁、信号量和条件,例如

>>> from multiprocess import Condition
>>> c = Condition()
>>> print (c)
<Condition(<RLock(None, 0)>), 0>
>>> c.acquire()
True
>>> print (c)
<Condition(<RLock(MainProcess, 1)>), 0>

可以使用管理器在共享内存或服务器进程中创建共享对象,例如

>>> from multiprocess import Manager
>>> manager = Manager()
>>> l = manager.list(range(10))
>>> l.reverse()
>>> print (l)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> print (repr(l))
<Proxy[list] object at 0x00E1B3B0>

可以通过各种方式将任务卸载到工作进程池中,例如

>>> from multiprocess import Pool
>>> def f(x): return x*x
...
>>> p = Pool(4)
>>> result = p.map_async(f, range(10))
>>> print (result.get(timeout=1))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

当安装了 dill 时,序列化扩展到大多数对象,例如

>>> from multiprocess import Pool
>>> p = Pool(4)
>>> print (p.map(lambda x: (lambda y:y**2)(x) + x, xrange(10)))
[0, 2, 6, 12, 20, 30, 42, 56, 72, 90]

更多信息

可能最好的开始方式是查看以下文档:http://multiprocess.rtfd.io。还可以查看 multiprocess.tests 以了解如何使用 multiprocess 来利用多个进程并行执行 Python。您可以使用 python -m multiprocess.tests 运行测试套件。由于 multiprocess 符合 multiprocessing 接口,因此位于 http://docs.pythonlang.cn/library/multiprocessing.html 的示例和文档也适用于 multiprocess,如果您将 import multiprocessing as multiprocess。请查看 https://github.com/uqfoundation/multiprocess/tree/master/py3.12/examples 以了解一些基本用例和并行运行 Python 代码的基准测试的示例。请随时在 GitHub 上提交工单或在 stackoverflow(@Mike McKerns)上提问。如果您想分享您如何在工作中使用 multiprocess,请发送电子邮件(至 mmckerns at uqfoundation dot org)。

引用

如果您使用 multiprocess 进行的研究导致发表,我们要求您在您的出版物中引用以下内容以承认使用 multiprocess

M.M. McKerns, L. Strand, T. Sullivan, A. Fang, M.A.G. Aivazis,
"Building a framework for predictive science", Proceedings of
the 10th Python in Science Conference, 2011;
http://arxiv.org/pdf/1202.1056

Michael McKerns and Michael Aivazis,
"pathos: a framework for heterogeneous computing", 2010- ;
https://uqfoundation.github.io/project/pathos

请参阅 https://uqfoundation.github.io/project/pathos 或 http://arxiv.org/pdf/1202.1056 以获取更多信息。

项目详情


下载文件

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

源代码分发

multiprocess-0.70.17.tar.gz (1.8 MB 查看哈希值)

上传时间 源代码

构建分发

multiprocess-0.70.17-py313-none-any.whl (149.8 kB 查看哈希值)

上传时间 Python 3.13

multiprocess-0.70.17-py312-none-any.whl (148.0 kB 查看哈希值)

上传时间 Python 3.12

multiprocess-0.70.17-py311-none-any.whl (144.3 kB 查看哈希值)

上传时间 Python 3.11

multiprocess-0.70.17-py310-none-any.whl (134.8 kB 查看哈希值)

上传时间 Python 3.10

multiprocess-0.70.17-py39-none-any.whl (133.4 kB 查看哈希值)

上传时间 Python 3.9

multiprocess-0.70.17-py38-none-any.whl (132.6 kB 查看哈希值)

上传时间 Python 3.8

multiprocess-0.70.17-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl (135.0 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.28+ x86-64

multiprocess-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl (135.0 kB 查看哈希值)

上传时间 PyPy macOS 11.0+ ARM64

multiprocess-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (135.0 kB 查看哈希值)

上传于 PyPy macOS 10.15+ x86-64

multiprocess-0.70.17-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl (133.5 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.28+ x86-64

multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_x86_64.whl (133.5 kB 查看哈希值)

上传于 PyPy macOS 10.13+ x86-64

multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_arm64.whl (133.5 kB 查看哈希值)

上传于 PyPy macOS 10.13+ ARM64

multiprocess-0.70.17-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl (135.1 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.28+ x86-64

multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (132.8 kB 查看哈希值)

上传于 PyPy macOS 10.9+ x86-64

multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_arm64.whl (132.8 kB 查看哈希值)

上传于 PyPy macOS 10.9+ ARM64

由以下机构支持

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