使用python中的线程运行无限循环


问题内容

我的程序按以下方式设计:

  1. 程序的第一部分从传感器获取实时值,并使用 Matplotlib 对其进行 绘制。 这必须长时间进行。而且,它将信息记录到数据库中。
  2. 第二部分是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中的线程吗?

为什么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