使用python中的线程运行无限循环
问题内容:
我的程序按以下方式设计:
- 程序的第一部分从传感器获取实时值,并使用 Matplotlib 对其进行 绘制。 这必须长时间进行。而且,它将信息记录到数据库中。
- 第二部分是IP摄像机。我必须从IP摄像机获取输入并显示它。为了显示,我使用的是OpenCV的
imshow
方法。另外,我正在存储来自IP摄像机的视频。
问题:
我有适当的算法,问题是我需要在while循环中运行这两个算法。条件是我不能退出任何一个。现在,线程是一个很好的选择,但是我已经阅读了有关GIL的文章,那么如何运行两个无限循环呢?
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
同时运行?
问题答案:
据我了解您的问题,您有两个不同的任务,您希望它们连续执行。现在关于您的问题:
如何运行两个无限循环?
您可以创建两个不同的线程来为您运行这些无限循环。第一个线程将执行您的task1,第二个线程将执行task2。
另外,一旦我开始执行一个线程,当第一个线程连续/无限运行时,如何执行另一个线程?
如果您使用的是两个不同的线程,则无需担心此问题。如果线程不共享任何资源,那么您不必担心这个事实。但是,如果要停止/暂停另一个线程中的一个线程,反之亦然,则可以使用标志或锁来实现一种机制。这些问题在这种情况下将有所帮助:
为什么python
threading.Thread对象具有“开始”但没有“停止”?
使用线程的示例示例:
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
是否需要共享资源?
为他们使用锁。这里有些例子。一,二和如何在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