Mon programme est conçu de la manière suivante:
imshow
d'OpenCV. En outre, je stocke la vidéo de la caméra IP.Question: J'ai les algorithmes en place, le problème est que je dois exécuter ces deux boucles dans un moment. La condition est que je ne puisse sortir d'aucun d'eux. Maintenant, le threading est une bonne alternative à cela, mais j'ai lu sur le GIL, alors comment faire pour exécuter deux boucles infinies?
from multiprocessing import Process
def methodA():
while TRUE:
do something
def methodB():
while TRUE:
do something
p=Process(target=methodA())
p.start()
p1=Process(target=methodB())
p1.start()
Maintenant, lorsque je lance le processus p
, il commence à s'exécuter. Après cela, comment puis-je démarrer p1
pour s'exécuter simultanément?
Si j'ai bien compris votre question, vous souhaitez que ces tâches soient exécutées de manière continue. Maintenant, concernant vos questions:
comment puis-je exécuter deux boucles infinies?
Vous pouvez créer deux threads différents qui exécuteront ces boucles infinies pour vous. Le premier thread effectuera votre tâche1 et le second exécutera tâche2.
Aussi, une fois que je commence à exécuter un thread, comment puis-je exécuter l'autre thread quand le premier thread tourne continuellement/infiniment?
Si vous utilisez deux threads différents, vous n'avez pas à vous inquiéter de ce problème. Si les threads ne partagent aucune ressource, vous n'avez pas à vous soucier de ce fait . Cependant, si vous souhaitez arrêter/suspendre un thread de l'autre thread ou inversement, vous pouvez implémenter un mécanisme à l'aide de drapeaux ou serrures. Ces questions aideront dans ce cas:
Est-il possible de tuer un fil en Python?
Pourquoi l'objet threading.Thread python a-t-il 'démarrer', mais pas 'arrêter'?
faire-un-programme-munltithreaded
Exemple d'exemple utilisant threading:
from threading import Thread
class myClassA(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
self.start()
def run(self):
while True:
print 'A'
class myClassB(Thread):
def __init__(self):
Thread.__init__(self)
self.daemon = True
self.start()
def run(self):
while True:
print 'B'
myClassA()
myClassB()
while True:
pass
Pour les ressources partagées?
Utilisez Serrures pour eux. Voici quelques exemples. One , two et Comment synchroniser les discussions en python?
Et si je ne veux pas l'exécuter avec des classes? Comment est-ce que je fais ceci en utilisant seulement des méthodes?
from threading import Thread
def runA():
while True:
print 'A\n'
def runB():
while True:
print 'B\n'
if __== "__main__":
t1 = Thread(target = runA)
t2 = Thread(target = runB)
t1.setDaemon(True)
t2.setDaemon(True)
t1.start()
t2.start()
while True:
pass
from threading import Thread
import time
class PrintA(Thread):
def __init__(self):
Thread.__init__(self)
self.running = True
def run(self):
while self.running:
print('A')
time.sleep(1)
def stop(self):
self.running = False
class PrintB(Thread):
def __init__(self):
Thread.__init__(self)
self.running = True
def run(self):
while self.running:
print('B')
time.sleep(2)
def stop(self):
self.running = False
a = PrintA()
b = PrintB()
a.start()
b.start()
time.sleep(10)
a.stop()
time.sleep(10)
b.stop()