Python中的更优多进程和多线程
项目描述
关于Multiprocess
multiprocess 是 multiprocessing 的分支。 multiprocess 通过使用 dill 提供增强的序列化功能,扩展了 multiprocessing。 multiprocess 利用 multiprocessing 支持使用Python标准库的 threading 模块的API来生成进程。 multiprocessing 自Python 2.6以来作为标准库的一部分分发。
multiprocess 是 pathos 的一部分,这是一个用于异构计算的Python框架。 multiprocess 正在积极开发中,因此任何用户反馈、错误报告、评论或建议都将非常受赞赏。问题列表位于 https://github.com/uqfoundation/multiprocess/issues,维护着旧的列表 https://uqfoundation.github.io/project/pathos/query。
主要功能
multiprocess 可以实现
使用管道或多生产者/多消费者队列在进程之间传输对象
使用服务器进程或(对于简单数据)共享内存在进程间共享的对象
multiprocess 提供以下功能
threading 中所有同步原语的对等函数
一个 Pool 类,便于将任务提交给工作进程
使用 dill 提高序列化功能
当前版本
multiprocess 的最新发布版本可在以下位置获取
multiprocess 采用 3 条款 BSD 许可证发布,并且是 multiprocessing 的分支。
开发版本
您可以在以下位置获取包含所有最新功能的最新开发版本
如果您有新的贡献,请提交一个拉取请求。
安装
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4ae2f11a3416809ebc9a48abfc8b14ecce0652a0944731a1493a3c1ba44ff57a |
|
MD5 | 25990efb2cc669639df2535425c9193a |
|
BLAKE2b-256 | e9341acca6e18697017ad5c8b45279b59305d660ecf2fbed13e5f406f69890e4 |
multiprocess-0.70.17-py313-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 20c28ca19079a6c879258103a6d60b94d4ffe2d9da07dda93fb1c8bc6243f522 |
|
MD5 | b921e0f51f378369030bb72ec374fc0c |
|
BLAKE2b-256 | c8b72e9a4fcd871b81e1f2a812cd5c6fb52ad1e8da7bf0d7646c55eaae220484 |
multiprocess-0.70.17-py312-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2818af14c52446b9617d1b0755fa70ca2f77c28b25ed97bdaa2c69a22c47b46c |
|
MD5 | 239e414db63e1a088895d5c4acc12f9c |
|
BLAKE2b-256 | a469d3f343a61a2f86ef10ed7865a26beda7c71554136ce187b0384b1c2c9ca3 |
multiprocess-0.70.17-py311-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2884701445d0177aec5bd5f6ee0df296773e4fb65b11903b94c613fb46cfb7d1 |
|
MD5 | 1eeaf7b155d27baedba4502403cd9b5d |
|
BLAKE2b-256 | b2078cbb75d6cfbe8712d8f7f6a5615f083c6e710ab916b748fbb20373ddb142 |
multiprocess-0.70.17-py310-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 38357ca266b51a2e22841b755d9a91e4bb7b937979a54d411677111716c32744 |
|
MD5 | 1cdc0bae6a5c7f38a58cc2fbe03746a1 |
|
BLAKE2b-256 | e7a939cf856d03690af6fd570cf40331f1f79acdbb3132a9c35d2c5002f7f30b |
哈希值 for 多进程-0.70.17-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c2c82d0375baed8d8dd0d8c38eb87c5ae9c471f8e384ad203a36f095ee860f67 |
|
MD5 | 3bc09e2d9c2bf4c53bc9a289bd6d838f |
|
BLAKE2b-256 | 20e3db48b10f0a25569c5c3a20288d82f9677cb312bccbd1da16cf8fb759649f |
哈希值 for 多进程-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d729f55198a3579f6879766a6d9b72b42d4b320c0dcb7844afb774d75b573c62 |
|
MD5 | b7116987ac38c0d35b5b3b7b3bd120cc |
|
BLAKE2b-256 | 8f0abb06ea45e5b400cd9944e05878fdbb9016ba78ffb9190c541eec9c8e8380 |
哈希值 for 多进程-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7ddb24e5bcdb64e90ec5543a1f05a39463068b6d3b804aa3f2a4e16ec28562d6 |
|
MD5 | 11f74243bd3b53dde9712d51a4f5e77b |
|
BLAKE2b-256 | f297e57eaa8a4dc4036460d13162470eb0da520e6496a90b943529cf1ca40ebd |
哈希值 for 多进程-0.70.17-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a0f01cd9d079af7a8296f521dc03859d1a414d14c1e2b6e676ef789333421c95 |
|
MD5 | 45a0f9138eebc321020e59b94a845fc3 |
|
BLAKE2b-256 | d6beefe661a064d9348bcc4a21bcdb6c8c02a2ab61ec337a70fbdeaeb75693e0 |
哈希值 for 多进程-0.70.17-pp39-pypy39_pp73-macosx_10_13_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2b12e081df87ab755190e227341b2c3b17ee6587e9c82fecddcbe6aa812cd7f7 |
|
MD5 | 80cfb83cd3a5c5c109e9dcc6777fb81e |
|
BLAKE2b-256 | 127359682eecafc2c7880141a7b9c0cf65d6491ffd67a2a8453396976f2a4f33 |
哈希值 for 多进程-0.70.17-pp39-pypy39_pp73-macosx_10_13_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2ea0939b0f4760a16a548942c65c76ff5afd81fbf1083c56ae75e21faf92e426 |
|
MD5 | c06fdbe100f5c61903adbe8b27a8cc2e |
|
BLAKE2b-256 | 60a13359dd7d4ecee40ce05f952bef3737075d0d1cccab04b59e732dac26534c |
哈希值 for 多进程-0.70.17-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 27b8409c02b5dd89d336107c101dfbd1530a2cd4fd425fc27dcb7adb6e0b47bf |
|
MD5 | aaa4ad26bcb7eeff7ad04d2e0c1659bf |
|
BLAKE2b-256 | c1bcf85768d4d9889219e69aae5c94c333a2e56c9929befc941d3206648194b9 |
哈希值 for 多进程-0.70.17-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 349525099a0c9ac5936f0488b5ee73199098dac3ac899d81d326d238f9fd3ccd |
|
MD5 | 37a8a480fca19b0f810d120eb8ae4b60 |
|
BLAKE2b-256 | 38f067f2ae380115f43e8f2cb04bcd7d784841ee485be4ba98d88425d5e02e26 |
哈希值 for 多进程-0.70.17-pp38-pypy38_pp73-macosx_10_9_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a22a6b1a482b80eab53078418bb0f7025e4f7d93cc8e1f36481477a023884861 |
|
MD5 | 8ff34c6d4c55b1bd105e9fc29ab68018 |
|
BLAKE2b-256 | 2924a0be32891f474f58adb1f732c6c7e1eb68d932920168a517a3939c7193ea |