【问题标题】:multiprocessing.pool.Pool string back to objectmultiprocessing.pool.Pool 字符串返回对象
【发布时间】:2017-11-07 00:26:23
【问题描述】:

我正在尝试将池发送到字符串,然后稍后将其取回以关闭/加入池。这是一个如何复制我正在做的事情的例子:

import multiprocessing

num_of_p = 5
_pool = multiprocessing.Pool(num_of_p)
pool_string = str(_pool)

有没有办法将pool_string 变回multiprocessing.pool.Pool object

【问题讨论】:

  • 不可能。你为什么要构建这个字符串?
  • 我正在使用烧瓶创建一个网络工具,该工具将有关该工具运行时正在发生的事情的信息流式传输到页面的 dom。在运行结束时,因为我使用生成器返回打印语句流,我找不到关闭/加入池的好方法。因此,目前我在运行结束时将重定向流式传输到 dom 到应用程序中的新位置,传递池字符串的 qouted 版本。希望是我可以使用 exec() 或其他东西从字符串中取回它。哦,当然,那没用。
  • 我已经将它替换为一个全局变量,它根据运行的 uuid 处理所有池,但我只是好奇它是否可能。
  • 我记得我最初想要的东西。我希望“0x000001F8495BCC18 处的对象”可以以某种方式用于创建指向该对象引用的新对象。很抱歉,当我第一次询问时,我没有传达这个信息。

标签: python multiprocessing pool


【解决方案1】:

可能你对python的动态类型有误解。

首先,pool_string 从来都不是 multiprocessing.pool.Pool 类的对象

你刚刚调用了 its__str__ 方法:

>>> pool_string
'<multiprocessing.pool.Pool object at 0x000001F8495BCC18>'
>>> dir(_pool)[26]
'__str__'
>>> _pool.__str__()
'<multiprocessing.pool.Pool object at 0x000001F8495BCC18>'

从头到尾都是字符串。

也许您只是想再次引用您的实际_pool

_pool2 = _pool 

【讨论】:

  • 感谢您的帮助。
  • 阅读您对 Flask 网络工具的评论,我想您想转移该池的状态或其他东西,但您可能遇到过这个问题 NotImplementedError: pool objects cannot be passed between processes or pickled 我希望有人能真正提供帮助你。
  • 我记得我最初想要的东西。我希望“0x000001F8495BCC18 处的对象”可以以某种方式用于创建指向该对象引用的新对象。很抱歉,当我第一次询问时,我没有传达这个信息。
猜你喜欢
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多