我使用该类来调度跨多个内核pathos
ProcessingPool
的函数的并发执行。run_regex()
该函数将正则表达式作为参数并计算匹配的列表条目。如果找到匹配项,它将匹配值放入result_queue
.
result_queue
据我了解,目前每个工作进程都会在其虚拟地址空间中创建一个本地副本。但是,我想将此 Queue 对象用作共享内存机制,以便从主进程访问所有匹配项。
问题:
- 有没有办法将 Queue 对象传递给 Pool 初始化程序,以便队列充当共享内存部分?
- 队列对象是否需要同步?
- 有没有更好的方法来解决这个问题?
代码片段
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)