Cómo ejecutar dos funciones simultáneamente.

Estoy ejecutando prueba pero quiero ejecutar 2 funciones al mismo tiempo. Tengo una cámara y le digo que se mueva a través de la espuma. Luego, inicio sesión en la cámara a través de SSH para verificar la velocidad a la que está configurada la cámara. Cuando verifico la velocidad, la cámara se ha detenido, por lo que no hay velocidad disponible. ¿Hay alguna manera de hacer que estas funciones se ejecuten al mismo tiempo para probar la velocidad de la cámara? El código de muestra está debajo:

class VerifyPan(TestAbsoluteMove): def runTest(self): self.dest.PanTilt._x=350 # Runs soap move command threading.Thread(target = SudsMove).start() self.command = './ptzpanposition -c 0 -u degx10' # Logs into camera and checks speed TestAbsoluteMove.Ssh(self) # Position of the camera verified through Ssh (No decimal point added to the Ssh value) self.assertEqual(self.Value, '3500') 

Ahora he intentado el módulo de subprocesamiento como se menciona a continuación. El subproceso no se ejecuta en sincronización con la función TestAbsoluteMove.Ssh (). ¿Hay algún otro código que necesito para hacer que esto funcione?

He observado poner argumentos en la statement del hilo que indica que el hilo se ejecuta cuando la función Ssh (). ¿Alguien sabe qué entrar en esta statement?

Lo siento si no he explicado correctamente. La función ‘SudsMove’ mueve la cámara y la función ‘Ssh’ inicia sesión en la cámara y verifica la velocidad a la que se está moviendo la cámara. El problema es que en el momento en que la función ‘Ssh’ se registra en la cámara se ha detenido. Necesito que ambas funciones se ejecuten en paralelo para poder verificar la velocidad de la cámara mientras aún se está moviendo.

Gracias

    Si desea usar la implementación común de Python (CPython), puede usar el módulo de multiprocesamiento , que hace maravillas (puede pasar argumentos no seleccionables a subprocesos, matar tareas, …), ofrece una interfaz similar a la de hilos, y no sufre del locking global de intérpretes.

    El inconveniente es que los subprocesos se generan, lo que lleva más tiempo que la creación de subprocesos; esto solo debería ser un problema si tiene muchas, muchas tareas cortas. En situaciones en las que cada tarea lleva un tiempo “largo”, el módulo de multiprocesamiento debe ser excelente.

    Importe el módulo de threading y ejecute SudsMove() así:

     threading.Thread(target = SudsMove).start() 

    Eso creará y comenzará un hilo de fondo que hace el movimiento.

    RESPUESTA A LA PREGUNTA EDITADA:

    Hasta donde entiendo esto, TestAbsoluteMove.Ssh(self) sondea la velocidad una vez y almacena el resultado en self.Value ?! Y está probando la inclinación / rotación / posición final esperada con self.assertEqual(self.Value, '3500') ?!

    Si eso es correcto, debes esperar a que la cámara inicie su movimiento. Probablemente podrías sondear la velocidad en un cierto intervalo:

     # Move camera in background thread threading.Thread(target = SudsMove).start() # What does this do? self.command = './ptzpanposition -c 0 -u degx10' # Poll the current speed in an interval of 250 ms import time measuredSpeedsList = [] for i in xrange(20): # Assuming that this call will put the result in self.Value TestAbsoluteMove.Ssh(self) measuredSpeedsList.append(self.Value) time.sleep(0.25) print "Measured movement speeds: ", measuredSpeedsList 

    La velocidad de movimiento será el valor más grande en la lista de velocidades de measuredSpeedsList (es decir, la max(measuredSpeedsList) velocidades de max(measuredSpeedsList) ). Espero que tenga sentido …

    Solo puede haber un hilo ejecutándose al mismo tiempo. Esto ha sido ampliamente respondido aquí . Una solución será usar dos procesos separados. La respuesta anterior proporciona algunos consejos.

    Si puede hacer que su código se ejecute bajo Jython o IronPython, entonces puede ejecutar varios subprocesos simultáneamente; no tienen esa cosa ridícula de “Global Interpreter Lock” de CPython.