【发布时间】:2018-01-26 05:08:49
【问题描述】:
我有一个 Python 类,我想在其中生成线程或进程以共享数据,而不是跨线程或生成的进程复制它们。这是我正在尝试做的抽象。
class ClassA(object):
def work(self, bigDictionary, bigList):
param1 = self.getDictParam(bigDictionary)
param2 = self.getListParam(bigList)
return self.someOtherWork(param1, param2)
def parallelizeWork(self, listOfBigDictionaries, listOfBigLists):
result = # PARALLEL WORK ON EACH PAIR OF DICTIONARY AND LIST
return result
您可以意识到我的任务(受处理器限制)是令人尴尬的并行,我尝试了多处理。不幸的是,因为我传递的对象很大,它们会触发酸洗错误。我真的不希望进程或线程复制数据,因为work 及其调用的函数不会修改任何对象;相反,我会让他们简单地从对象中读取。有没有合适的方法在 Python 中做到这一点?
【问题讨论】:
-
是work i/o 绑定还是处理器绑定?
-
处理器绑定
-
是什么让您认为对象的大小导致了酸洗错误?你读过文档中的Sharing state between processes 吗?
-
@wwii 抛出的错误字面意思是,不能腌制超过 2 GiB 的对象。
-
您可能需要提供有关如何使用大共享对象的更多信息。但我认为如果你使用多线程而不是多处理,它将避免酸洗,因此可以工作。
标签: python multithreading parallel-processing shared-memory