Comment exécuter deux fonctions simultanément
Je suis en cours d'exécution de test, mais je veux courir 2 fonctions en même temps. J'ai un appareil photo et je le dis de déplacement par l'intermédiaire de la mousse, je suis alors vous connectant à l'appareil photo via SSH pour vérifier la vitesse de l'appareil photo est réglé. Lorsque je vérifie la vitesse de l'appareil photo s'est arrêté donc pas de vitesse est disponible. Est il possible que je peux obtenir ces fonctions de s'exécuter en même temps pour tester la vitesse de la caméra. Exemple de code ci-dessous:
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')
Maintenant, j'ai essayé le module threading comme mentionné ci-dessous. Le thread ne pas fonctionner en synchronisation avec la fonction TestAbsoluteMove.Ssh(). Est-il un autre code que j'ai besoin pour faire ce travail.
J'ai cherché à mettre des arguments dans le thread de l'instruction que l'état du thread s'exécute lorsque le Ssh() fonction. Personne ne sait ce que pour entrer dans cette déclaration?
Désolé si je n'ai pas expliqué correctement. Le " SudsMove fonction des mouvements de la caméra et de l' 'Ssh' fonction se connecte à l'appareil photo et permet de contrôler la vitesse de la caméra est en train de bouger. Le problème est que par le temps, 'Ssh' fonction de journaux dans l'appareil photo s'est arrêté. J'ai besoin de deux fonctions de s'exécuter en parallèle afin que je puisse vérifier la vitesse de la caméra alors qu'il est toujours en mouvement.
Grâce
source d'informationauteur chrissygormley
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser le commun Python de mise en œuvre (Disponible), vous pouvez certainement utiliser le multitraitement module, qui fait des merveilles (vous pouvez passer de la non-pickleable arguments pour les sous-processus, tuer des tâches,...), offre une interface similaire à celle de threads, et ne souffre pas de la Global Interprète de Verrouillage.
L'inconvénient est que les sous-processus sont générés, ce qui prend plus de temps que la création de threads; cela ne devrait être un problème si vous avez beaucoup, beaucoup d'opérations de courte durée. Dans les situations où chaque tâche prend un "long" moment, la multitraitement module doit être grande.
Importer les
threading
module et exécuterSudsMove()
comme suit:Qui permettra de créer et démarrer un thread d'arrière-plan qui fait le mouvement.
RÉPONSE À ÉDITÉ QUESTION:
Autant je comprends cela,
TestAbsoluteMove.Ssh(self)
les sondages de la vitesse une fois et stocke le résultat dansself.Value
?! Et vous êtes les tests de la fin prévue de l'inclinaison/rotation/de position avecself.assertEqual(self.Value, '3500')
?!Si c'est correct, vous devez attendre que l'appareil photo pour commencer son mouvement. Vous pourriez probablement sondage de la vitesse dans un certain intervalle:
La vitesse de déplacement sera la plus grande valeur dans
measuredSpeedsList
(c'est à diremax(measuredSpeedsList)
). L'espoir qui fait sens...Il ne peut exister qu'un seul thread en cours d'exécution au même moment. Cela a été répondu largement ici. Une solution est d'utiliser les deux processus distincts. La réponse ci-dessus donne quelques conseils.
Si vous pouvez obtenir votre code à exécuter en vertu de Jython ou IronPython, alors vous peut exécuter plusieurs threads simultanément; ils n'ont pas que de dingo "Global Interprète Lock" chose de Disponible.