Tuve que hacer operaciones pesadas de E/S encuadernadas, es decir, analizar archivos de gran tamaño y convertir de un formato a otro. ¡Inicialmente solía hacerlo en serie, es decir, analizando uno tras otro ...! El rendimiento fue muy pobre (usó más de 90 segundos). Así que decidí usar threading para mejorar el rendimiento. Creé un hilo para cada archivo. (4 hilos)python threading y rendimiento?
for file in file_list:
t=threading.Thread(target = self.convertfile,args = file)
t.start()
ts.append(t)
for t in ts:
t.join()
Pero para mi sorpresa, no hay ninguna mejora en el rendimiento absoluto. Ahora también lleva alrededor de 90+ segundos completar la tarea. Como se trata de operaciones de I/O obligado, esperaba mejorar el rendimiento.
Gracias delty..Pero el módulo de multiprocesamiento tiene sus propios problemas. 1) Tengo que refactorizar mi código ya que no puedo usar métodos de instancia ... 2) Tengo un método de instancia que tiene muchos manejadores de archivos ... Estos manejadores de archivos están cerrados en procesos secundarios, lo que no es aceptable. Entonces necesito abrirlos de nuevo. Desafortunadamente no tengo manera de conocerlos, ya que se pasan durante la instanciación – kumar
No tiene que ser la función de conversión en sí que se realiza en un proceso separado. ¿Hay alguna forma de que pueda hacer la parte de creación de instancias en procesos separados? P.ej. escriba una función o incluso una secuencia de comandos separada que realice una sola instanciación y conversión; luego, escriba un "script maestro" que use el módulo de multiprocesamiento para ejecutar estas funciones. Se pueden ejecutar scripts separados utilizando el módulo [subprocess] (http://docs.python.org/library/subprocess.html). Si hay una gran cantidad de datos compartidos, entonces sí, ahí es donde el multiprocesamiento se complica. Pero hay muchas más herramientas en ese módulo :) – detly