我使用chron
pathos
类来调度ProcessingPool
函数在多个内核上的并发执行。该函数以正则表达式作为参数,并评估列表项是否匹配。如果找到匹配项,则将匹配值放入run_regex()
中。
据我了解,当前每个工作进程在其虚拟地址空间中创建result_queue
的本地副本。但是,我想将此Queue对象用作共享内存机制,以便从主进程访问所有匹配项。
问题:
代码段
result_queue
答案 0 :(得分:1)
Pool
对象的initializer参数。Queue
对象已经对mp安全,因此无需保护它们。您不需要Queue
即可从run_regex
函数返回值。您只需从函数中返回key
,它就会在map
结果中变为可用。
def run_regex(expr):
group = []
for key, value in data.iteritems():
match = re.search(expr, key, re.I)
if match is not None:
group.append(key)
return group
groups = pool.map(run_regex, in_regex)
keys = [key for group in groups for key in group]
或
keys = list(itertools.chain.from_iterable(groups))
map
将返回按run_regex
分组的密钥。之后,您可以轻松地整理列表。