多进程对于全局变量访问,在每一个全局变量里面放入一个m变量,保证每个进程访问变量互不干扰
程序1
import os
from multiprocessing import Process
from time import sleep
m = 1 #不可变类型
list1 = [] #可变类型
def task1(s,name):
global m #对全局变量进行修改,需要声明global
while True:
sleep(s)
m += 1
list1.append(str(m)+'task1')
print('这是任务一...........',m,list1)
def task2(s,name):
global m #对全局变量进行修改,需要声明global
while True:
sleep(s)
m += 1
list1.append(str(m)+'task2')
print('这是任务二...........',m,list1)
number = 1
if __name__ == '__main__':
print(os.getpid())
print(os.getppid())
#子进程
p1 = Process(target=task1,name='任务1',args=(1,'aa'))
p1.start() #start()是开进程做这个动作,run是直接做这个动作
p2 = Process(target=task2,name='任务2',args=(2,'bb'))
p2.start()
while True:
sleep(1)
m += 1
print('------->main:',m)
结果1
14528
7864
------->main: 2
这是任务一........... 2 ['2task1']
------->main: 3
这是任务一........... 3 ['2task1', '3task1']
这是任务二........... 2 ['2task2']
------->main: 4
这是任务一........... 4 ['2task1', '3task1', '4task1']
------->main: 5
这是任务一........... 5 ['2task1', '3task1', '4task1', '5task1']
这是任务二........... 3 ['2task2', '3task2']
------->main: 6
这是任务一........... 6 ['2task1', '3task1', '4task1', '5task1', '6task1']
------->main: 7
这是任务一........... 7 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1']
这是任务二........... 4 ['2task2', '3task2', '4task2']
------->main: 8
这是任务一........... 8 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1', '8task1']
------->main: 9
这是任务一........... 9 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1', '8task1', '9task1']
这是任务二........... 5 ['2task2', '3task2', '4task2', '5task2']
------->main: 10
程序
from multiprocessing import Process
class MyProcess(Process):
def __init__(self,name):
super(MyProcess, self).__init__()
self.name = name
#重写run()方法
def run(self):
n = 1
while True:
#print('进程名字:'+self.name)
print('{}---------->自定义进程,n:{}'.format(n,self.name))
n += 1
if __name__ == '__main__':
p = MyProcess('小明')
p.start()
p1 = MyProcess('小红')
p1.start()
部分结果
---------->自定义进程,n:小明
73743---------->自定义进程,n:小明
73744---------->自定义进程,n:小明
73745---------->自定义进程,n:小明
73513---------->自定义进程,n:小红73746---------->自定义进程,n:小明
73747---------->自定义进程,n:小明
73748---------->自定义进程,n:小明73514---------->自定义进程,n:小红
73515---------->自定义进程,n:小红
73516---------->自定义进程,n:小红
结果分析:
在start()会做两件事情:
1.开新的进程
2.run()