multiprocessing.pool.map и функцию с двумя аргументами

Я использую 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.

Да, я собираюсь проверить это и дам вам знать, ребята.

10
задан Phyo Arkar Lwin 16 December 2011 в 10:20
поделиться