python - 如何从 Python 维护到 MySQL 的嵌套并行连接
问题描述
我们有一个小的 python 程序,它从一个不断被填充的目录中对文件进行排序,并相应地将其加载到正确的 MySQL 表中。
有七个表,python 程序为每个表维护 5 个打开的连接(使用名为 DBUtils.PooledDB 的工具)。
我想通过所有 35(7x5) 个连接并行发送文件,但是虽然使用 map 的 python 多处理使我能够在一个级别(一个表的五个连接)这样做,但父进程必须串行运行(通过七张桌子)。
我使用 multiprocessing.Pool.map_async() 启动整个过程,因此所有 35 个连接在开始时都处于活动状态,但随着每个表完成,其余表必须等待整个池完成。
我希望能够分别运行所有 35 个进程,以便它们可以继续相互独立地工作。
from multiprocessing import Pool
import pymysql
from DBUtils.PooledDB import PooledDB
# Pool of 35 connections
g_pool_0 = PooledDB(creator=pymysql, maxconnections=5 host=host, user=user db=db)
...
g_pool_6 = PooledDB(creator=pymysql, maxconnections=5 host=host, user=user db=db)
def insert_to_db(filename):
# Load filename data into the database according to the filename
if __name__ == "__main__":
while True:
files_0 = glob.glob(join(cur_d, 'results/*_0.csv'))
...
files_0 = glob.glob(join(cur_d, 'results/*_6.csv'))
# start inserting to DB on all 7 databases
pool_0 = Pool(5)
pool_0.map_async(insert_to_db, files_0)
...
pool_7 = Pool(5)
pool_7.map_async(insert_to_db, files_7)
pool_0.close()
pool_0.join()
...
pool_7.close()
pool_7.join()
这可行,但我必须使用 while 循环来继续处理接收恒定文件流的目录。如果 while 循环中有任何活动连接,则其他连接必须等待 while 循环完成。
我不想运行 7 个单独的脚本。无论如何在嵌套线程/进程中执行此操作?
解决方案
推荐阅读
- python - Python/Selenium 有没有办法阻止加载特定的图像类?
- php - 如何使用 DomDocument 从跨度(类)中获取文本
- javascript - 无法从组件获取 redux 状态
- c++ - 是否可以将内存动态分配给全局变量或静态变量?
- r - r 重命名列名以包含 0
- java - 使用 mockito 框架在单元测试中返回 NullPointerException 的多选条件查询
- java - IntelliJ 中的模块和项目有什么区别?
- tauri - 如何在 tauri 中配置安装程序
- amazon-web-services - 部署新应用程序时出现 Elasticbeanstalk 版本错误
- node.js - TypeError:无法读取未定义错误的属性“创建”