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 不同,它似乎是可腌制的。