网络编程
位置:首页>> 网络编程>> Python编程>> python多进程共享变量

python多进程共享变量

作者:geosson  发布时间:2023-08-30 07:40:53 

标签:python,多进程,共享变量

本文实例为大家分享了python多进程共享变量的相关代码,供大家参考,具体内容如下


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']
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com