不带lambda的Python defaultdict(lambda:None)

不带lambda的Python defaultdict(lambda:None),python,python-multiprocessing,Python,Python Multiprocessing,我的代码使用的是ProcessPoolExecutor,它不能pickle lambda和函数。我想并行执行的一些代码使用默认值为None的defaultdict 你将如何进行?如果可能的话,我不想触及并行化代码 我所拥有的: class SomeClass: def __init__(self): self.some_dict = defaultdict(lambda: None) def generate(self): <some co

我的代码使用的是
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]))
    
class-SomeClass:
定义初始化(自):
self.some_dict=defaultdict(lambda:None)
def生成(自身):
定义要并行化的某些方法(x:SomeClass):
def some_method():
max\u workers=round(os.cpu\u count()//1.5)
每个进程调用次数=100
以ProcessPoolExecutor(max_workers=max_workers)作为执行器:
data=[executor.submit(一些方法要并行化,一些类())]for范围内的(每个进程调用)]
数据=列表(itertools.chain.from_iterable([r.result()表示数据中的r]))
试试:


这将获得对
NoneType
的引用,用作
defaultdict
的默认工厂。构建时,它会生成
None
,与
lambda
不同,它似乎是可拾取的。

可能正是我一直在寻找的标准方式。
collections.defaultdict(type(None))