python多进程共享变量

举报
zxros10 发表于 2020/03/31 11:35:44 2020/03/31
【摘要】 我们在使用python开发应用时,为了提高性能,往往会考虑使用并发。需要注意的是,python的多线程不是并发的,所以我们应该选择多进程multiprocessing。创建子进程的方法:from multiprocessing import Processdef func_entry(): print("I am sub process")sub_process = Process(...

我们在使用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的值,在另外一个进程中都能感知到



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。