在池进程之间共享队列对象

时间:2018-08-14 03:57:36

标签: python multiprocessing pathos

我使用chron pathos类来调度ProcessingPool函数在多个内核上的并发执行。该函数以正则表达式作为参数,并评估列表项是否匹配。如果找到匹配项,则将匹配值放入run_regex()中。

据我了解,当前每个工作进程在其虚拟地址空间中创建result_queue的本地副本。但是,我想将此Queue对象用作共享内存机制,以便从主进程访问所有匹配项。

问题:

  1. 是否可以将Queue对象传递到Pool初始化程序中,以便队列充当共享内存部分?
  2. 是否需要与Queue对象进行同步?
  3. 是否有更好的方法来解决此问题?

代码段

result_queue

1 个答案:

答案 0 :(得分:1)

  1. 是的,您可以查看Pool对象的initializer参数。
  2. Queue对象已经对mp安全,因此无需保护它们。
  3. 您不需要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分组的密钥。之后,您可以轻松地整理列表。

相关问题