【问题标题】:How can I share values between multiprocess?如何在多进程之间共享值?
【发布时间】:2021-08-16 23:15:34
【问题描述】:

如何将一个进程中的值发送到另一个进程?例如,我有类似这段代码的东西。我想在 xFunc 中打印值。有人可以解释我该怎么做吗?谢谢。

def yFunc():
    value = 5

def xFunc():
    print(value)

def smap(f):
    return f()

def main():
    f_x = functools.partial(xFunc)
    f_y = functools.partial(yFunc)

    with Pool() as pool:
        res = pool.map(smap, [f_x, f_y])


if __name__ == '__main__':
    main()

编辑:值不是常数,它会不断变化。

Edit2:我找到了解决问题的方法。这里的解决方案:

https://stackoverflow.com/a/58208695/16660763

【问题讨论】:

  • 我需要使用进程,因为我测试了进程和线程来测量时间。我的脚本处理速度要快得多。
  • 你看到这个了吗:stackoverflow.com/questions/38322574/…
  • 不,我以前没见过。谢谢。

标签: python multiprocessing functools


【解决方案1】:

有几种方法。 一种方法是使用 global 关键字。像这样:

def yFunc():
    global value
    value = 5

def xFunc():
    print(value + 1)

yFunc()
xFunc()

或者像这样:

value = 5

def yFunc():
    global value
    value = value + 1

def xFunc():
    print(value)

yFunc()
xFunc()

另一种方法是将变量传递给函数,如下所示:

def yFunc():
    value = 5
    return value

def xFunc(x):
    print(x)

xFunc(yFunc())

希望这就是你的要求。

【讨论】:

  • 谢谢你的回答,我试试看。
  • 很遗憾,我无法将这些方法用于多进程。
  • 进程之间没有共享全局变量——所以这不起作用。
【解决方案2】:

Python 提供了一些工具来实现它。

考虑Pipes, QueuesValueManagers

【讨论】:

  • 是的,我通过使用 Managers() 解决了。谢谢。
  • 如果您需要共享“简单”值(例如整数),那么您应该使用共享内存实现(例如 Value)而不是托管类型以提高效率。
猜你喜欢
  • 2012-07-22
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 2012-01-22
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多