有没有什么方法可以在Python中同时执行多while循环?

我有几个函数可以从共享内存中读取和写入数据,它们是通过while循环执行的。

例如,

def functionA():
    while True:
         # read data from shared memory
         # manipulate data and write again to shared memory

def functionB():
    while True:
         # read data from shared memory at the same time with functionA()
         # manipulate data (different way with functionA()) and write to shared memory(also different)

在这种情况下,如何在主函数中执行两个函数?

我尝试了 multiprocess ,如下所示

if __name__ == '__main__':
    A = Process(target=functionA)
    B = Process(target=functionB)
    A.start()
    B.start()
    A.join()
    B.join()

它不起作用

ysh851216 回答:有没有什么方法可以在Python中同时执行多while循环?

您可以以非常相似的方式使用threading

from threading import Thread,Lock

您的台词变化很小:

if __name__ == '__main__':
    A = Thread(target=functionA)
    B = Thread(target=functionB)
    A.start()
    B.start()
    A.join()
    B.join()

但是,您应该注意,在不使用某些更安全的方法(例如Lock(如上导入))的情况下,在两个线程中同时操作同一对象并不是“线程安全的”。因此,您的功能可能需要稍作更改:

non_thread_safe_object = list() # Just an example
lock = Lock()

def functionA():
    while True:
        with lock:
            non_thread_safe_object.append('something')
        unrelated_code()

def functionB():
    while True:
        with lock:
            non_thread_safe_object.append('something else')
        other_unrelated_code()

这两个操作可以同时运行,因为lock确保在任何给定时间都只能执行一个不安全的操作,而只要遇到该代码,其他不相关的操作就可以发生。

还要注意,在不中断循环(并使用while True的情况下),这两个循环将永远运行。

本文链接:https://www.f2er.com/3118928.html

大家都在问