不带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))