问题标签 [python-multiprocessing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1817 浏览

python - 从python多处理中的子进程返回大对象

我正在使用 Python 多处理来产生一些工人。它们中的每一个都应该返回一个大小为几 MB 的数组。

  1. 由于我的返回数组是在子进程中创建的,因此在进程结束时需要将其复制回父内存中是否正确?(这似乎需要一段时间,但这可能是一个 pypy 问题)
  2. 是否有一种机制允许父母和孩子访问同一个内存对象?(同步不是问题,因为只有一个孩子可以访问每个对象)

恐怕我在 python 如何实现多处理方面存在一些差距,并且试图说服 pypy 玩得好并不会让事情变得更容易。谢谢!

0 投票
2 回答
112294 浏览

python - multiprocessing.Pool: What's the difference between map_async and imap?

I'm trying to learn how to use Python's multiprocessing package, but I don't understand the difference between map_async and imap. I noticed that both map_async and imap are executed asynchronously. So when should I use one over the other? And how should I retrieve the result returned by map_async?

Should I use something like this?

0 投票
1 回答
3154 浏览

python - 多处理池 apply_async

我正在玩多处理,尤其是 Pool。

我的机器应该能够运行 32 个线程(根据/proc/cpuinfo文件,我有 32 个处理器)。

当我运行这个脚本时,我得到以下结果:

所以,有两件事我不太明白:

  • 如何并行运行这 64 个进程?(因为所有的开始时间和结束时间都是一样的)
  • processesPool 构造函数中的最大值是多少?
0 投票
2 回答
1943 浏览

python - 使用 Python 多处理的令人尴尬的并行任务的预期加速

我正在学习使用 Python 的 Multiprocessing 包来解决令人尴尬的并行问题,因此我编写了串行和并行版本来确定小于或等于自然数n的素数的数量。根据我从博客文章Stack Overflow 问题中读到的内容,我想出了以下代码:

串行

平行

这是我得到的n = 10000000 (对于并行我请求 8 个进程):

所以看起来我可以获得超过 3 倍的加速。这是我的问题

  1. 显然这不是线性加速,所以我能做得更好(或者我应该实际期望什么样的加速)?
  2. 看起来阿姆达尔定律回答了这个问题,但我不知道如何确定我的程序的哪一部分是严格串行的。

任何帮助表示赞赏。

编辑:有 4 个物理内核,能够进行超线程。

0 投票
0 回答
183 浏览

python - Django 不会通过多处理将行插入到表中

我有一些使用multiprocessing模块和 Django ORM 的脚本。场景很简单:

  1. 获取数据,
  2. 创建 n 个进程并将一部分数据分配给每个进程,
  3. 做一点事,
  4. 使用 Django ORM 保存到数据库中。

好吧,在第 4 步中,我遇到了 Django 没有将所有数据保存在数据库中的问题。准备数据的函数是正确和检查的,但我不知道Django的问题在哪里。在创建进程之前,关闭旧连接,以便每个进程都可以拥有自己的连接。

Django 和多处理是否有问题,或者最大连接数(我最多使用 4 个进程)?



示例代码:
connection.close() #part 我调用函数“fun”,并发送数据 p = Process(target=fun, args=(i, data,)

长话短说。如果我从 Process 调用 save_data,save() 方法不会在表中保存行。如果在不使用 Process 的情况下调用该方法(只是正常调用脚本),则一切正常。

0 投票
3 回答
2377 浏览

python - 腌制numpy数组的子类时保留自定义属性

我在numpy 文档之后创建了一个 numpy ndarray 的子类。特别是,我通过修改提供的代码添加了自定义属性。

我正在使用 Python 在并行循环中操作此类的实例multiprocessing。据我了解,范围本质上“复制”到多个线程的方式是使用pickle.

我现在遇到的问题与 numpy 数组的腌制方式有关。我找不到任何关于此的全面文档,但莳萝开发人员之间的一些讨论表明我应该专注于该__reduce__方法,该方法被称为酸洗。

任何人都可以对此有所了解吗?最小的工作示例实际上只是我上面链接到的 numpy 示例代码,为了完整起见,复制到这里:

现在问题来了:

谢谢。

0 投票
1 回答
1206 浏览

python - PyMongo 具有多处理和生成器的批量写入操作功能

PyMongo支持使用sDB.insert(iter_something(converted)). 批量写入操作功能,可批量执行写入操作,以减少网络往返次数并提高写入吞吐量。

以下代码似乎有效,但我不知道 PyMongo 是否仍然能够与多处理一起迭代生成器,直到它产生 1000 个文档或 16MB 数据,然后在将批处理插入 MongoDB 时暂停生成器。

0 投票
3 回答
3461 浏览

python - 从 Python 脚本限制一次运行的进程数

我正在运行一个备份脚本,该脚本启动子进程以通过 rsync 执行备份。但是我无法限制它一次启动的 rsync 数量。

这是我目前正在处理的代码:

当我运行数百个 rsync 时,这最多显示一个孩子。这是实际启动 rsync 的代码(从 do_backup 函数内部),它command是一个包含 rsync 行的变量:

如果我在 do_backup 函数中添加一个 sleep(x) ,它将在它睡觉时显示为一个活跃的孩子。此外,进程表显示 rsync 进程的 PPID 为 1。我由此假设 rsync 分裂并且不再是 python 的子进程,这允许我的子进程死亡,所以我不能再指望它了. 有谁知道如何让 python 孩子活着并被计数,直到 rsync 完成?

0 投票
1 回答
1485 浏览

python - Python 3 多处理:内部和超时错误处理和回调

我正在尝试使用 Pool.starmap_async 运行一些将多个参数作为输入的代码,以便快速扫描参数空间。该代码运行一个有时不收敛的 linalg 函数,而是抛出一个 np.linalg.LinAlgError。在这种情况下,我希望我的代码返回 np.nan,并继续其愉快的方式。理想情况下,我还想指定一个超时,以便代码在设定的秒数后放弃并继续使用不同的参数组合。

# This is actually some long function that sometimes returns a linalg error def run_solver(A, B): return A+B

if __name__ == '__main__':

我试图将 TimeoutError 作为异常捕获,以便代码继续运行,并且我故意提出 LinAlgError 因为我试图在代码用完与未能及时收敛时分开 - 我意识到那是多余的。一方面,结果字典并没有达到我的预期:有没有办法查询当前进程的参数并将它们用作字典键?另外,如果发生超时错误,我理想情况下会以某种方式标记这些参数——最好的方法是什么?

最后,为什么在这段代码中回调只调用一次?不应该在每个过程成功完成时调用它吗?该代码返回一个字典,其中所有参数都被塞进一个键(作为 .zip 文件),所有答案都是键值中的一个列表。

0 投票
1 回答
1133 浏览

python - 使用多处理时python matplotlib动画保存错误

我正在创建一个 matplotlib 动画,该动画贯穿文件中的一系列图像。我正在可视化的文件通常非常大,并且每个图像堆栈都有很长的加载时间(约 5 秒)。通过使用多处理错开加载过程,我设法让动画顺利运行,但我无法将动画保存为视频文件。

这是代码:

代码运行没有错误,但它生成的文件以某种方式损坏。当我尝试用 vlc 查看它时,我得到一个长长的重复错误流......

我尝试使用各种编写器和编码器以各种文件格式保存,结果大致相同。

此问题仅在multiprocessing用于加载数据时出现。如果我只是用 创建数据data = np.random.rand(75,100,100),动画保存没有问题。

问题: 我如何matplotlib.animation与 一起玩multiprocessing