我正在使用 multiprocessing.Pool()
这是我想要使用池的内容:
def insert_and_process(file_to_process,db):
db = DAL("path_to_mysql" + db)
#Table Definations
db.table.insert(**parse_file(file_to_process))
return True
if __name__=="__main__":
file_list=os.listdir(".")
P = Pool(processes=4)
P.map(insert_and_process,file_list,db) # here having problem.
我想传递2个参数。我想做的是仅初始化4个数据库连接(在每次函数调用时尝试创建连接,可能会有数百万次调用,并导致IO死锁)。如果我可以为每个进程创建4个数据库连接之一,那就可以了。
是否有关于池的解决方案?还是我应该放弃它?
编辑:
通过你们两个人的帮助,我得到了这个:args=zip(f,cycle(dbs))
Out[-]:
[('f1', 'db1'),
('f2', 'db2'),
('f3', 'db3'),
('f4', 'db4'),
('f5', 'db1'),
('f6', 'db2'),
('f7', 'db3'),
('f8', 'db4'),
('f9', 'db1'),
('f10', 'db2'),
('f11', 'db3'),
('f12', 'db4')]
那么这就是它的工作方式,我将把DB连接代码移到主级别并执行以下操作:
def process_and_insert(args):
#Table Definations
args[1].table.insert(**parse_file(args[0]))
return True
if __name__=="__main__":
file_list=os.listdir(".")
P = Pool(processes=4)
dbs = [DAL("path_to_mysql/database") for i in range(0,3)]
args=zip(file_list,cycle(dbs))
P.map(insert_and_process,args) # here having problem.
好的,我会测试它并告诉你们结果。
def f((arg1, arg2)):
这种语法。 - Ferdinand Beyer