PYTHON能实现多进程共享变量吗

 我来答
就烦条0o
2017-06-07 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46493
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
from multiprocessing import Process, Manager
import os
import time
 
 
class MulFun():
 
    def __init__(self):
        self.a = [1,2,3,4,5]
        self.b = 0
        self.c = {}
        self.s = "hello world"
        self.radius = Manager().dict()
        self.radius['a'] = self.a
        self.radius['b'] = self.b
        self.radius['c'] = self.c
        self.radius['s'] = self.s
 
 
    def func1(self):
        self.b = self.radius['b']
        for i in range(10):
            self.b += i
            self.radius['b'] = self.b
            time.sleep(0.5)
            print '1:  ', self.radius['b'],':', self.radius['c'], os.getpid()
 
 
    def func2(self):
        self.c = self.radius['c']
        for i in ['ab', 'bc', 'cd', 'df', 'fg']:
            self.c[i] = i + i
            self.radius['c'] = self.c
            time.sleep(0.5)
            print '2:   ', self.radius['b'],':', self.radius['c'], os.getpid()
 
    def run(self):
        process1 = Process(target=self.func1, args=())
        process2 = Process(target=self.func2, args=())
        process1.daemon = True
        process2.daemon = True
        process1.start()
        process2.start()
        process1.join()
        process2.join()
 
 
class MulSun1:
 
    def __init__(self, radius):
        self.radius = radius
        self.a = radius['a']
        self.s = radius['s']
 
    def process(self):
 
        for i, j in enumerate(self.a):
            #self.a[i] = j * 2
            #self.radius['a'] = self.a
            time.sleep(0.5)
            print '1:  ', self.radius['a'], ' & ', self.radius['s']
 
 
class MulSun2:
 
    def __init__(self, radius):
        self.radius = radius
        self.a = radius['a']
        self.s = radius['s']
 
    def process(self):
 
        for i in range(10):
            self.s = self.s + ':%  s' %i
            if i < len(self.a):
                self.a[i] += i
            else:
                self.a.append(i + i)
            self.radius['s'] = self.s
            self.radius['a'] = self.a
            time.sleep(0.5)
            print '2:  ', self.radius['a'], ' & ', self.radius['s']
 
if __name__ == '__main__':
    aa = MulFun()
    s1 = MulSun1(aa.radius)
    s2 = MulSun2(aa.radius)
    process1 = Process(target=s1.process, args=())
    process2 = Process(target=s2.process, args=())
    process1.daemon = True
    process2.daemon = True
    process1.start()
    process2.start()
    process1.join()
    process2.join()
    print "------------------------"
    print 'process id:', os.getpid()
    print 'done'
    print  aa.radius['a'], ' & ', aa.radius['s']
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式