我正在运行一个脚本来获取数据库表的列表,检查每个表的行数,并将每个查询的结果追加到字典中。我使用多处理来加速它:Manager创建一个共享列表和共享字典,进程可以从中读取并附加到其中,Process用来设置进程。在from multiprocessing import Process, Manager
def main():
mgr = Manager()
# Function to get the list of tables
table_list = mgr.list(get_table_list())
counts = mgr.dict()
for table in table_list:
# get_table_count runs a 'SELECT COUNT(*) FROM
# the result to the counts dict
p = Process(target=select_star, args=(table, counts, 'prod'))
p.start()
p.join()
我的问题是,流程如何管理开放流程的数量?我习惯于将Pool()与apply\u async()方法一起使用,在这里,您可以在实例化池时指定进程数。在
如果这是用于本申请的最佳方法,请提供任何补充说明。在
—
感谢dano帮助实施以下两个解决方案:
1-使用Pool.apply_异步我已经习惯了:
^{pr2}$
2-使用池.map()与itertools.部分()from multiprocessing import Process, Manager, cpu_count
def main():
mgr = Manager()
table_list = get_table_list()
pool = Pool(cpu_count() / 2)
prod_counts = mgr.dict()
func = partial(get_table_count, result_dict=prod_counts, env='prod')
pool.map(func, table_list)
print prod_counts