我有几个函数可以从共享内存中读取和写入数据,它们是通过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()
它不起作用
答案 0 :(得分:2)
您可以以非常相似的方式使用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
的情况下),这两个循环将永远运行。