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

在python中使用线程运行无限循环,python,multithreading,opencv,matplotlib,Python,Multithreading,Opencv,Matplotlib,我的程序按以下方式设计: 程序的第一部分从传感器获取实时值,并使用Matplotlib绘制它。这必须在长时间内完成。此外,它还将信息记录到数据库中 第二部分是IP摄像机。我必须从IP摄像头获取输入并显示它。对于显示,我使用OpenCV的imshow方法。此外,我正在存储来自IP摄像头的视频 问题:我已经准备好了算法,问题是我需要在一段时间内运行这两个循环。条件是我不能退出其中任何一个。现在线程是一个很好的替代方法,但是我已经读到了关于GIL的文章,那么如何运行两个无限循环呢 from multi

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

  • 程序的第一部分从传感器获取实时值,并使用Matplotlib绘制它。这必须在长时间内完成。此外,它还将信息记录到数据库中
  • 第二部分是IP摄像机。我必须从IP摄像头获取输入并显示它。对于显示,我使用OpenCV的
    imshow
    方法。此外,我正在存储来自IP摄像头的视频
  • 问题:我已经准备好了算法,问题是我需要在一段时间内运行这两个循环。条件是我不能退出其中任何一个。现在线程是一个很好的替代方法,但是我已经读到了关于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
    以同时运行?

    据我所知,您有两个不同的任务,希望它们连续执行。现在关于你的问题:

    如何运行两个无限循环

    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()
    
    您可以创建两个不同的线程来运行这些无限循环。第一个线程将执行任务1,第二个线程将执行任务2


    另外,一旦我开始执行一个线程,我如何执行另一个线程 第一个线程连续/无限运行时的线程

    如果您使用的是两个不同的线程,那么您不必担心这个问题。如果线程不共享任何资源,那么您不必担心这个事实。 然而,如果您希望停止/暂停一个线程与另一个线程的连接,或者反之亦然,那么您可以使用标志或锁实现一种机制。这些问题在这种情况下会有所帮助:

    使用线程的示例:

    共享资源

    使用它们。这里有一些例子,及

    如果我不想使用类来运行它呢?如何仅使用方法来实现这一点


    如果您唯一关心的是运行无限循环,那么使用多线程就没有真正的问题。而且,一旦我开始执行一个线程,当第一个线程连续/无限运行时,如何执行另一个线程?我不明白您的意思。有两个不同的线程并行执行。除非一个方法依赖于另一个,否则没有真正的问题。一个方法无限运行,我在一个线程中启动它,现在如何运行另一个线程?。等等,我将添加一些代码来阐明这个问题。@graveti请查看更新的问题。我希望这会有帮助。请检查更新的问题,如果你没有这样做,它会更清楚地解释情况。如果他们共享资源,我该怎么办?哇!谢谢你的回答。我试过了,效果很好!只是一些问题,你为什么要把
    线程
    传递给全班?如果我不想用类来运行它呢?我如何只使用方法来实现这一点?向上投票!如何暂停它们并恢复它们或监视它们?而不是在结束时进行无限循环,每个线程的连接方法调用将是最佳的。t1.join(),t2.join()做得很好,但是有没有办法在完成一次后重用这个线程?
    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()