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