El script consiste en duplicar x archivos a partir de uno dado (un xml). Se setea un valor único a un par de campos en cada archivo.
Bien, eso ya lo tengo funcionado. Lo que quiero es acelerar el proceso usando threads.
with open(args.template, 'r') as f_in:
template_content = f_in.read()
msg_per_thread = int(args.messages / args.threads)
remaining_messages = args.messages % args.threads
print('[%s] Duplicating messages...' % (time.strftime("%H:%M:%S", time.localtime())))
with ThreadPoolExecutor() as executor:
for thread in range(1, args.threads+1):
end = msg_per_thread * thread
start = (end - msg_per_thread) + 1
if thread == args.threads:
end += remaining_messages
executor.submit(duplicate, template_content, msg_name, msg_dir, start, end)
print('[%s] Duplicating messages finished' % (time.strftime("%H:%M:%S", time.localtime())))
La función duplicate toma los parametros start y end para luego hacer un bucle en ese rango. En cada ciclo del bucle se escribe el nuevo archivo.
def duplicate(template_content, msg_name, msg_dir, n_msg_start, n_msg_end):
for num_msg in range(n_msg_start, n_msg_end + 1):
num_msg = str(num_msg)
result = template_content.replace('{env-id}', 'MESSAGE_' + num_msg, 1)
result = result.replace('{sdr-reference}', num_msg)
msg = msg_dir + '/' + msg_name + '_' + num_msg + '.xml'
with open(msg, 'w') as f_out:
f_out.write(result)
Lo que estoy testeandolo y no veo ninguna mejora... Da igual el valor del numero de threads que le de, siempre me tarda lo mismo.
Estoy usando bien el ThreadPoolExecutor ? Me falta algo?