python多进程共享变量
我们在使用python开发应用时,为了提高性能,往往会考虑使用并发。需要注意的是,python的多线程不是并发的,所以我们应该选择多进程multiprocessing。创建子进程的方法:
from multiprocessing import Process
def func_entry():
print("I am sub process")
sub_process = Process(target=func_entry)
sub_process.start()
如果需要将一个值传给子线程,可以将该值作为参数:
from multiprocessing import Process
def func_entry(flag):
print("I am sub process, flag ", flag)
flag = 1
sub_process = Process(target=func_entry, args=(flag))
sub_process.start()
注意:这里flag必须定义在创建子进程之前,并且传入的flag是当前的值,父进程中在Process调用后再修改flag,func_entry函数是感知不到的。
那么如何让flag可以在父子进程之间都感知到变化呢?可以使用multiprocessing的共享变量
import time
from multiprocessing import Process, Manager
def func_entry(flag):
while flag.value < 100:
print("I am sub process, flag ", flag.value)
time.sleep(0.0001)
#这里创建了一个int类型('i'表示类型为整型)的共享变量,初值为1
flag = Manager().Value('i', 1)
sub_process = Process(target=func_entry, args=(flag))
sub_process.start()
while flag.value < 150:
print("I am father process, flag ", flag.value)
time.sleep(0.0001)
flag.value += 1
这样无论在子进程还是父进程中修改flag的值,在另外一个进程中都能感知到
- 点赞
- 收藏
- 关注作者
评论(0)