Я использую 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 соединения с БД (здесь будет пытаться создать соединение для каждого вызова функции, поэтому, возможно, миллионы из них и вызовут замораживание ввода-вывода до смерти). Если я могу создать 4 соединения с базами данных и по одному для каждого процесса, все будет в порядке.
Есть ли какое-нибудь решение для Pool? или я должен отказаться от этого?
РЕДАКТИРОВАТЬ:
С вашей помощью я получил это, сделав следующее:
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')]
Итак, вот как это будет работать, я собираюсь переместить код подключения к БД на основной уровень и сделай это:
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.
Да, я собираюсь проверить это и дам вам знать, ребята.