Soy un novato multiprocesamiento,Python, multihilo demasiado lento, multiproceso
sé algo de enhebrar pero necesito para aumentar la velocidad de este cálculo, es de esperar con multiprocesamiento:
Ejemplo Descripción : envía cadena a un hilo, altera la cadena + prueba de referencia, envía el resultado para la impresión.
from threading import Thread class Alter(Thread): def __init__(self, word): Thread.__init__(self) self.word = word self.word2 = '' def run(self): # Alter string + test processing speed for i in range(80000): self.word2 = self.word2 + self.word # Send a string to be altered thread1 = Alter('foo') thread2 = Alter('bar') thread1.start() thread2.start() #wait for both to finish while thread1.is_alive() == True: pass while thread2.is_alive() == True: pass print(thread1.word2) print(thread2.word2)
Esto está actualmente lleva unos 6 segundos y lo necesito para ir más rápido.
He estado investigando el multiprocesamiento y no puedo encontrar algo equivalente al código anterior. Creo que lo que busco es agrupando pero los ejemplos que he encontrado han sido difíciles de entender. Me gustaría aprovechar todos los núcleos (8 núcleos) multiprocessing.cpu_count()
pero realmente solo tengo restos de información útil sobre multiprocesamiento y no lo suficiente para duplicar el código anterior. Si alguien puede señalarme en la dirección correcta o mejor aún, proporcione un ejemplo que sería muy apreciado. Python 3 por favor
no ocupado, espere a que se complete el subproceso. usa Thread.join()! – soulcheck
¿por qué no? He hecho esto en la mayor parte de mi codificación y si puede proporcionar una buena razón, lo cambiaré todo :) – Rhys
Bueno, es al menos tan bueno como ocupado esperando y probablemente lo hace esperar pasivamente hasta que el hilo se termina sin comer el CPU (aunque no puedo encontrarlo en los documentos, apuesto a que cpython no está ocupado; espera en su Thread.join()). – soulcheck