当前位置: 首页 > 面试题库 >

Python-多重处理:如何在多个流程之间共享指令?

司马羽
2023-03-14
问题内容

一个程序,该程序创建在可连接队列上工作的多个进程Q,并且最终可能会操纵全局字典D来存储结果。(因此,每个子进程都可以D用来存储其结果,并查看其他子进程正在产生什么结果)

如果我在子进程中打印字典D,则可以看到对它进行的修改(即在D上)。但是在主流程加入Q之后,如果我打印D,那就是空洞的字典!

我了解这是同步/锁定问题。有人可以告诉我这里发生了什么,如何同步D的访问?


问题答案:

普遍的答案涉及使用Manager对象。改编自文档:

from multiprocessing import Process, Manager

def f(d):
    d[1] += '1'
    d['2'] += 2

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    d[1] = '1'
    d['2'] = 2

    p1 = Process(target=f, args=(d,))
    p2 = Process(target=f, args=(d,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    print d

输出:

$ python mul.py 
{1: '111', '2': 6}


 类似资料:
  • 我使用的是Python多处理,更准确地说 这种方法具有巨大的内存消耗;几乎消耗了我所有的RAM(此时它变得非常慢,因此使多重处理变得非常无用)。我认为问题在于是一个巨大的对象(一个大型pandas数据文件),每个进程都要复制它。我尝试使用共享数据文件,而不复制 我是第一次使用多重处理,也许我的理解还不够好。实际上是在这种情况下使用的正确方法吗?我已经看到了其他的建议(例如队列),但现在有点困惑。共

  • 我想在多个python进程之间共享。以便从其他python进程发送。 如何跨多个python进程共享。 代码如下: 目标是从通道从其他python进程发送。

  • 问题内容: 我们遇到了适用于多线程的方案。 在主线程中,执行一些逻辑操作并更新数据库,在某种程度上,它将调用另一个服务来更新数据库,该服务在另一个线程中运行。 我们希望两个线程共享同一个事务,这意味着任何一个线程中的任何一个操作都将失败,那么另一个线程中的该操作也将被回滚。 但是工作了几天,我发现一些帖子说JTA不支持多线程。当前我们使用Bitronix作为JTA提供者,有没有人知道Bitroni

  • 问题内容: 请考虑以下代码: 这给出了输出 但是,我希望它能给 ..因为在调用触发方法时h.id已更改为“ B”。 似乎是在启动单独的进程时创建了主机实例的副本,因此原始主机中的更改不会影响该副本。 在我的项目中(当然,要更详细地说明),主机实例字段有时会更改,并且由在单独的进程中运行的代码触发的事件可以访问这些更改很重要。 问题答案: 多处理在不同的 流程中 运行东西。事物在发送时 不被 复制几

  • 背景:我正在并行运行自动化测试。使用pom.xml中的分叉,多个浏览器在相同数量的线程中启动,即1个浏览器是1个线程。 中的下面插件创建了与线程(fork)计数相等数量的。 所有这些类都同时并行执行。因此,似乎每当我创建或时,每个线程都会创建自己的这些,因此跨多个线程共享变量的概念是不起作用的。 我只想让一个线程访问“准备测试数据”函数,并将<code>标志 我正在按照教程https://www.

  • 问题内容: 我想像这样在多个线程之间共享一个变量: 我想在主线程和帮助线程之间共享,这是我创建的两个不同的Java类。有什么办法吗?谢谢! 问题答案: 二者并可以参照包含该变量的类。 然后,可以使该变量为 volatile ,这意味着 对该变量的更改在两个线程中立即可见。 有关更多信息,请参见本文。 易变变量 共享已同步的可见性功能,但不共享原子性功能。这意味着线程将自动 查看volatile变量