在Python中是否有任何方法可以同时执行多while循环?

在Python中是否有任何方法可以同时执行多while循环?,python,multithreading,while-loop,Python,Multithreading,While Loop,我有几个从共享内存读写数据的函数,它们通过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

我有几个从共享内存读写数据的函数,它们通过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)
在这种情况下,如何在主函数中执行两个函数

我尝试了多进程,如下所示

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

它不起作用

您可以以非常类似的方式使用
线程

from threading import Thread, Lock
你的台词几乎不需要改变:

if __name__ == '__main__':
    A = Thread(target=functionA)
    B = Thread(target=functionB)
    A.start()
    B.start()
    A.join()
    B.join()
但是,您应该注意,在两个线程中同时操作同一对象而不使用某种更安全的方法,如
(上面导入的),这不是“线程安全的”。因此,您的函数可能需要稍作更改:

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()
这两种操作都可以同时运行,因为
确保在任何给定时间只运行一个不安全的操作,而在遇到该代码时,其他不相关的操作都可能发生


还请注意,如果不中断循环(并使用
while True
),这两种方法将永远运行

您可以以非常类似的方式使用
线程

from threading import Thread, Lock
你的台词几乎不需要改变:

if __name__ == '__main__':
    A = Thread(target=functionA)
    B = Thread(target=functionB)
    A.start()
    B.start()
    A.join()
    B.join()
但是,您应该注意,在两个线程中同时操作同一对象而不使用某种更安全的方法,如
(上面导入的),这不是“线程安全的”。因此,您的函数可能需要稍作更改:

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()
这两种操作都可以同时运行,因为
确保在任何给定时间只运行一个不安全的操作,而在遇到该代码时,其他不相关的操作都可能发生


还请注意,如果不中断循环(并使用
while True
),这两种方法将永远运行

你用threading.Thread代替process了吗?这两个函数读的是同一个东西吗?或者它们是连续运行的?比如A->B或者类似的?在python中,您通常可以尝试多处理和线程。但并行进行是否有目的?为什么它不起作用?当我们不知道是什么问题时,很难帮助我们?@SahilAggarwal,我已经尝试使用线程(而不是进程),它也不起作用。@JasonChia,有三种类型的共享内存,功能A使用memA,memB,功能B使用memA,memC。“所以有相同的读数,它们依次起作用。”JasonChia,我发现了为什么它不起作用。我使用mmap通过对象使用共享内存,两个线程同时尝试通过不同的模式(读写)访问相同的内存位置。我使用时间间隔在两个线程之间开始。最后,它确实有效。谢谢你使用线程。线程而不是进程这两个函数读的是同一个东西吗?或者它们是连续运行的?比如A->B或者类似的?在python中,您通常可以尝试多处理和线程。但并行进行是否有目的?为什么它不起作用?当我们不知道是什么问题时,很难帮助我们?@SahilAggarwal,我已经尝试使用线程(而不是进程),它也不起作用。@JasonChia,有三种类型的共享内存,功能A使用memA,memB,功能B使用memA,memC。“所以有相同的读数,它们依次起作用。”JasonChia,我发现了为什么它不起作用。我使用mmap通过对象使用共享内存,两个线程同时尝试通过不同的模式(读写)访问相同的内存位置。我使用时间间隔在两个线程之间开始。最后,它确实有效。谢谢