Python defaultdict(lambda: None) 没有 lambda
Python defaultdict(lambda: None) without lambda
我有使用 ProcessPoolExecutor
的代码,它不能 pickle lambda 和函数。我想并行执行的一些代码使用默认值为 None
.
的 defaultdict
您将如何进行?如果可能的话,我不想触及并行化代码。
我有:
class SomeClass:
def __init__(self):
self.some_dict = defaultdict(lambda: None)
def generate(self):
<some code>
def some_method_to_parallelize(x: SomeClass):
<some code>
def some_method():
max_workers = round(os.cpu_count() // 1.5)
invocations_per_process = 100
with ProcessPoolExecutor(max_workers=max_workers) as executor:
data = [executor.submit(some_method_to_parallelize, SomeClass())] for _ in range(invocations_per_process)]
data = list(itertools.chain.from_iterable([r.result() for r in data]))
尝试:
collections.defaultdict(type(None))
这会为您提供对 NoneType
的引用,以用作 defaultdict
的默认工厂。构造时,它会生成 None
,并且与 lambda
不同,它似乎是可腌制的。
我有使用 ProcessPoolExecutor
的代码,它不能 pickle lambda 和函数。我想并行执行的一些代码使用默认值为 None
.
defaultdict
您将如何进行?如果可能的话,我不想触及并行化代码。
我有:
class SomeClass:
def __init__(self):
self.some_dict = defaultdict(lambda: None)
def generate(self):
<some code>
def some_method_to_parallelize(x: SomeClass):
<some code>
def some_method():
max_workers = round(os.cpu_count() // 1.5)
invocations_per_process = 100
with ProcessPoolExecutor(max_workers=max_workers) as executor:
data = [executor.submit(some_method_to_parallelize, SomeClass())] for _ in range(invocations_per_process)]
data = list(itertools.chain.from_iterable([r.result() for r in data]))
尝试:
collections.defaultdict(type(None))
这会为您提供对 NoneType
的引用,以用作 defaultdict
的默认工厂。构造时,它会生成 None
,并且与 lambda
不同,它似乎是可腌制的。