Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python multiprocessing.Pool():我能返回的内容是否受到限制?_Python_Parallel Processing_Distributed Computing - Fatal编程技术网

Python multiprocessing.Pool():我能返回的内容是否受到限制?

Python multiprocessing.Pool():我能返回的内容是否受到限制?,python,parallel-processing,distributed-computing,Python,Parallel Processing,Distributed Computing,我正在使用Python的多处理池。有人告诉我,虽然我自己没有经历过这一点,因此我无法发布代码,但不能将多处理.Pool()-工作者中的任何内容“返回”到多处理.Pool()的主进程。像“酸洗”和“锁”这样的词被到处乱扔,但我不确定 这是正确的吗?如果是,这些限制是什么 在我的例子中,我有一个函数,它生成一个可变类对象,然后在完成一些工作后返回它。我希望有8个进程运行这个函数,生成它们自己的类,并在完成后返回每个类。完整的代码尚未编写,因此我无法发布 我可能会遇到什么问题 我的代码是:res=po

我正在使用Python的多处理池。有人告诉我,虽然我自己没有经历过这一点,因此我无法发布代码,但不能将
多处理.Pool()
-工作者中的任何内容“返回”到
多处理.Pool()
的主进程。像“酸洗”和“锁”这样的词被到处乱扔,但我不确定

这是正确的吗?如果是,这些限制是什么

在我的例子中,我有一个函数,它生成一个可变类对象,然后在完成一些工作后返回它。我希望有8个进程运行这个函数,生成它们自己的类,并在完成后返回每个类。完整的代码尚未编写,因此我无法发布

我可能会遇到什么问题

我的代码是:
res=pool.map(foo,参数列表)

Q:“这是正确的吗?如果是,这些限制是什么?”

视情况而定。这是正确的,但这里的问题是SER/DES处理,因为一对不相交的进程试图“发送”某些东西(那里:一个带有参数的任务规范,返回:…是的,等待已久的结果*)

负责这项工作的Python标准模块库的初始版本,
pickle
-module无法序列化一些更复杂类型的对象,类实例就是这样一个例子

当然,有越来越多的新版本在不断发展,但是这个SER/DES步骤是SPOF之一,在某些情况下可能会避免平滑的代码执行

接下来是这样的情况,当O/S请求尽可能多的内存分配时抛出
内存错误,O/S简单地拒绝任何新的分配请求,整个过程试图生成和发送
pickle.dumps(…)
不可解析地崩溃


我们有什么补救办法吗? 好吧,也许是,也许不是-Mike McKern的
dill
在某些情况下可能有助于更好地处理SER/DES处理中的复杂对象

可尝试使用
进口莳萝作为腌菜;pickle.dump(…)
并测试热门候选的
Class()
-实例,以获得SER/DES ed,如果它们有机会通过。如果不是的话,就没办法先用这个低挂水果的把戏

接下来,一种不太容易的方法是避免依赖硬连线的
多处理.Pool()
-实例化及其(上述)受限的SER/comms/DES方法,并基于通信代理范例将处理策略设计为系统

这样,您就可以在足够智能的代理之间进行大小合适、设计恰到好处的通信交换,这些代理知道(正如您设计它们所知道的那样)要告诉其他代理什么,即使不发送任何乳齿象大小的BLOB,也会意外地破坏任何SPoF中的处理你不能同时防止事后补救


在2020年至2020年第四季度,我所知道的或可以预见的安全、智能地实现这一点似乎没有更好的方法。

是pool multiprocessing.pool,因为周围有不同的池。如果是multiprocessing.pool,您可以处理可拾取的对象,请参见此处:只要每个函数返回不同的可变对象,就可以了。多重处理要求对象是可酸洗的,但实际的酸洗是在背后进行的。