问题标签 [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 投票
9 回答
337717 浏览

python - Python多处理PicklingError:无法腌制

很抱歉,我无法用更简单的示例重现错误,而且我的代码太复杂而无法发布。如果我在 IPython shell 而不是常规的 Python 中运行程序,一切都会顺利进行。

我查阅了有关此问题的一些先前注释。它们都是由使用池调用类函数中定义的函数引起的。但这对我来说不是这样。

我将不胜感激任何帮助。

更新:我腌制的功能是在模块的顶层定义的。虽然它调用了一个包含嵌套函数的函数。即,f()调用具有嵌套函数的g()调用,而我正在调用。, ,都在顶层定义。我用这种模式尝试了更简单的例子,但它确实有效。h()i()pool.apply_async(f)f()g()h()

0 投票
4 回答
16217 浏览

python - python pool apply_async 和 map_async 不会阻塞完整队列

我对python相当陌生。我正在使用多处理模块读取标准输入上的文本行,以某种方式转换它们并将它们写入数据库。这是我的代码片段:

现在一切正常,直到我开始处理巨大的输入文件(数亿行),然后通过管道传输到我的 python 程序中。在某些时候,当我的数据库变慢时,我看到内存已满。

玩了一会儿,发现 pool.apply_async 和 pool.map_async 从来没有阻塞过,所以要处理的调用队列越来越大。

解决我的问题的正确方法是什么?我希望我可以设置一个参数,一旦达到某个队列长度,它将阻止 pool.apply_async 调用。Java 中的 AFAIR 可以为此目的给 ThreadPoolExecutor 一个具有固定长度的 BlockingQueue。

谢谢!

0 投票
2 回答
67671 浏览

python - 在多个进程之间共享一个结果队列

multiprocessing模块的文档显示了如何将队列传递给以multiprocessing.Process. 但是如何与以 开头的异步工作进程共享队列apply_async?我不需要动态加入或其他任何东西,只是工人(反复)将他们的结果报告回基地的一种方式。

这失败了: RuntimeError: Queue objects should only be shared between processes through inheritance。我理解这意味着什么,并且我理解继承而不是要求酸洗/解酸(以及所有特殊的 Windows 限制)的建议。但是我如何一种有效的方式通过队列呢?我找不到一个例子,我尝试了几种以各种方式失败的替代方案。请帮忙?

0 投票
12 回答
287313 浏览

python - 如何恢复传递给 multiprocessing.Process 的函数的返回值?

在下面的示例代码中,我想恢复 function 的返回值worker。我该怎么做呢?这个值存储在哪里?

示例代码:

输出:

我似乎无法在存储在jobs.

0 投票
1 回答
4763 浏览

python - python多处理,管理器启动进程生成循环

我有一个简单的 python 多处理脚本,它设置了一个试图将工作输出附加到管理器列表的工作人员池。该脚本有 3 个调用堆栈: - main 调用 f1,它产生多个调用另一个函数 g1 的工作进程。当尝试调试脚本时(顺便说一下在 Windows 7/64 位/VS 2010/PyTools 上),脚本会运行到嵌套的进程创建循环中,从而产生无穷无尽的进程。谁能确定为什么?我确定我错过了一些非常简单的东西。这是有问题的代码: -

PS:尝试添加multiprocessing.freeze_support()到 main 无济于事。

0 投票
1 回答
2617 浏览

python - 池工作人员未完成所有任务

我有一个相对简单的 python 多处理脚本,它设置了一个工作池,dataframe通过自定义管理器将输出附加到熊猫。我发现当我在池上调用 close()/join() 时,并不是所有由 apply_async 提交的任务都已完成。

这是一个简化的示例,它提交了 1000 个作业,但只完成了一半,导致断言错误。我是否忽略了一些非常简单的事情,或者这可能是一个错误?

0 投票
0 回答
1847 浏览

python - Python 多处理:如何删除托管字典键?

我有一个由管理的字典SyncManager,我正在使用.get()and.update()函数来检索和设置字典键和值。但是,该del dict[key]方法未实施。有没有办法从托管字典键中删除键?

简单的例子:

0 投票
2 回答
205 浏览

python - python multiprocessing.Process.Manager 没有产生一致的结果?

我编写了以下代码来说明我看到的问题。我正在尝试使用 aProcess.Manager.list()来跟踪列表并增加该列表的随机索引。

每次产生 100 个进程时,每个进程都会将列表的随机索引增加 1。因此,人们会期望结果列表的 SUM 每次都相同,对吗?我得到介于 203 和 205 之间的东西。

0 投票
2 回答
1612 浏览

python - multiprocessing.manager 问题 sys.args

我在一个多处理的小型 Windows 服务应用程序中运行以下 python 代码行。

问题是在运行 Windows 服务时模块 sys 设置中似乎没有属性 argv。因此,我在 python 多处理分叉库中出现以下错误。我希望有人能够对这个问题有所了解。

问题的堆栈跟踪(在 Windows 服务中运行 multiprocessing.Manager 时):

更新

我的问题的一种可能的解决方案是,sys.argv如果在运行时未设置该值,则我手动设置该值,但这似乎非常不合pythonic。但可能是唯一的解决方案。stackoverflow 的人是怎么想的?

但是,这导致我遇到了 multiprocessing.manager 的一个新问题,其中代码中出现了意外的 EOFError。

0 投票
1 回答
223 浏览

python - Python:给定 2 个进程 A 和 B,从 B 调用 A 中的函数

基于:http ://docs.python.org/2/library/multiprocessing.html#managers我正在重写一个示例,将其拆分为 2 个进程,一个客户端和一个服务器。它是以下代码:

此代码有效,并且从客户端我可以从服务器调用 MathsClass 类中的函数。

我遇到的问题是我仅限于在 MathsClass 中直接定义的函数,这些函数不处理来自其他任何地方的数据。

例如,如果在 ManagerServer 中我定义了一个名为“addOuter(self,x,y)”的函数,然后在类 MathsClass 中,在它的函数 add 中我调用 addOuter(),它看不到它,它说它不存在.

所以,我的问题是,给定两个进程 A 和 B,其中 A 的函数定义在与init相同的级别,而不是在另一个类中,我如何从 B 调用 A 中的这些函数?