Python 在池进程之间共享队列对象
我使用Python 在池进程之间共享队列对象,python,multiprocessing,pathos,Python,Multiprocessing,Pathos,我使用pathosProcessingPool类来计划跨多个内核并发执行run\u regex()函数。该函数将正则表达式作为参数,并计算列表项是否匹配。如果找到匹配项,它会将匹配值放入结果\u队列 据我所知,当前每个工作进程在其虚拟地址空间中创建一个result\u queue的本地副本。但是,我想使用这个队列对象作为共享内存机制,以便从主进程访问所有匹配项 问题: 是否有方法将队列对象传递到池初始值设定项中,以便队列充当共享内存部分 是否需要与队列对象同步 有没有更好的方法来解决这个问题 代
pathos
ProcessingPool
类来计划跨多个内核并发执行run\u regex()
函数。该函数将正则表达式作为参数,并计算列表项是否匹配。如果找到匹配项,它会将匹配值放入结果\u队列
据我所知,当前每个工作进程在其虚拟地址空间中创建一个result\u queue
的本地副本。但是,我想使用这个队列对象作为共享内存机制,以便从主进程访问所有匹配项
问题:
from multiprocessing import Lock, Queue
from pathos.multiprocessing import ProcessingPool
result_queue = Queue()
lock = Lock()
data = {}
def run_regex(self, expr):
for key, value in data.iteritems():
matchStr = re.search(expr, key, re.I)
if matchStr:
lock.acquire()
result_queue.put(key)
lock.release()
break
def check_path(self):
pool = ProcessingPool()
pool.map(run_regex, in_regex)
池
对象的参数Queue
对象已经是mp安全的,因此无需保护它们run\u regex
函数返回值不需要队列。您只需从函数返回键
,即可通过映射
结果使用该键
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]
或
map
将返回按run\u regex
分组的键。之后,您可以轻松地将列表展平
keys = list(itertools.chain.from_iterable(groups))