繁体   English   中英

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

[英]Running infinite loops using threads in python

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

  1. 程序的第一部分从传感器获取实时值,并使用Matplotlib绘制它 这必须持续很长时间。 而且,它将信息记录到数据库中。
  2. 第二部分是IP摄像头。 我必须从IP摄像头获取输入并显示它。 为了显示我正在使用OpenCV的imshow方法。 另外,我正在存储来自IP Camera的视频。

问题:我已经有了算法,问题是我需要在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对象有'start',但不是'stop'?

制作-A-程序munltithreaded

使用线程的示例:

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
    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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM