私のプログラムは次のように設計されています。
imshow
メソッドを使用しています。また、IPカメラからのビデオを保存しています。質問:アルゴリズムが用意されていますが、問題はwhileループでこれら両方を実行する必要があることです。条件は、それらのいずれからも終了できないことです。スレッドはこれに代わる優れた選択肢ですが、GILについて読んだことがあるので、2つの無限ループをどのように実行しますか?
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()
プロセスp
を開始すると実行が開始されます。その後、p1
を開始して同時に実行するにはどうすればよいですか?
私があなたの質問を理解している限り、あなたには彼らに継続的に実行させたい2つの異なるタスクがあります。あなたの質問に関して:
2つの無限ループを実行するにはどうすればよいですか?
これらの無限ループを実行する2つの異なるスレッドを作成できます。最初のスレッドがtask1を実行し、2番目のスレッドがtask2を実行します。
また、スレッドの実行を開始したら、最初のスレッドが連続的/無限に実行されているときに他のスレッドを実行するにはどうすればよいですか?
2つの異なるスレッドを使用している場合、この問題を心配する必要はありません。スレッドがリソースを共有していない場合、この事実を心配する必要はありません。あるスレッドを他のスレッドから停止/一時停止したり、その逆にしたりする場合、フラグまたはロックを使用してメカニズムを実装できます。この場合、次の質問が役立ちます。
なぜpython threading.Threadオブジェクトには 'start'がありますが、 'stop'はありませんか?
スレッドを使用したサンプル例:
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
共有リソースの場合?
それらには Locks を使用します。下記は用例です。 One 、 two および pythonでスレッドを同期する方法
クラスを使用して実行したくない場合はどうすればよいですか?メソッドのみを使用してこれを行うにはどうすればよいですか?
from threading import Thread
def runA():
while True:
print 'A\n'
def runB():
while True:
print 'B\n'
if __name__ == "__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()