不采用python进程的编程
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
def task1():
while True:
sleep(1)
print('这是任务1')
def task2():
while True:
sleep(1)
print('这是任务2')
if __name__ == '__main__':
task1()
task2()
注意:py文件不要写成multiprocessing.py,否则会报错。报错如下
[root@ceph01 python]# python3 multiprocessing.py
Traceback (most recent call last):
File "multiprocessing.py", line 3, in <module>
from multiprocessing import Process
File "/python/multiprocessing.py", line 3, in <module>
from multiprocessing import Process
执行
[root@ceph01 python]# python3 multi.py
这是任务1
这是任务1
这是任务1
^CTraceback (most recent call last):
File "multi.py", line 17, in <module>
task1()
File "multi.py", line 8, in task1
sleep(1)
KeyboardInterrupt
可以看到,一直在执行任务1,如何让任务1和任务2交替执行,请看下面的代码
multiprocessing
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
def task1():
while True:
sleep(1)
print('这是任务1')
def task2():
while True:
sleep(1)
print('这是任务2')
if __name__ == '__main__':
p1=Process(target=task1)
p1.start()
p2=Process(target=task2)
p2.start()
[root@ceph01 python]# python3 multi.py
这是任务1
这是任务2
这是任务1
这是任务2
这是任务1
这是任务2
Process之target
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
def task1():
while True:
sleep(1)
print('这是任务1')
def task2():
while True:
sleep(2)
print('这是任务2')
if __name__ == '__main__':
p1=Process(target=task1)
p1.start()
p2=Process(target=task2)
p2.start()
[root@ceph01 python]# python3 multi.py
这是任务1
这是任务1
这是任务2
这是任务1
这是任务1
这是任务2
这是任务1
这是任务1
这是任务2
这是任务1
打印进程号
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
def task1():
while True:
sleep(1)
print('这是任务1',os.getpid(),'---------',os.getppid())
def task2():
while True:
sleep(2)
print('这是任务2',os.getpid(),'---------',os.getppid())
if __name__ == '__main__':
p1=Process(target=task1)
p1.start()
p2=Process(target=task2)
p2.start()
#task1()
#task2()
[root@ceph01 python]# python3 multi.py
这是任务1 1191605 --------- 1191604
这是任务1 1191605 --------- 1191604
这是任务2 1191606 --------- 1191604
这是任务1 1191605 --------- 1191604
这是任务1 1191605 --------- 1191604
这是任务2 1191606 --------- 1191604
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
def task1():
while True:
sleep(1)
print('这是任务1',os.getpid(),'---------',os.getppid())
def task2():
while True:
sleep(2)
print('这是任务2',os.getpid(),'---------',os.getppid())
if __name__ == '__main__':
print(os.getpid())
p1=Process(target=task1)
p1.start()
p2=Process(target=task2)
p2.start()
[root@ceph01 python]# python3 multi.py
1191908
这是任务1 1191909 --------- 1191908
这是任务2 1191910 --------- 1191908
这是任务1 1191909 --------- 1191908
这是任务1 1191909 --------- 1191908
这是任务2 1191910 --------- 1191908
这是任务1 1191909 --------- 1191908
这是任务1 1191909 --------- 1191908
Process之args
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
def task1(s):
while True:
sleep(s)
print('这是任务1',os.getpid(),'---------',os.getppid())
def task2(s):
while True:
sleep(s)
print('这是任务2',os.getpid(),'---------',os.getppid())
if __name__ == '__main__':
print(os.getpid())
p1=Process(target=task1,name='任务1',args=(1,))
p1.start()
print(p1.name)
p2=Process(target=task2,name='任务2',args=(2,))
p2.start()
print(p2.name)
[root@ceph01 python]# python3 multi.py
1193237
任务1
任务2
这是任务1 1193238 --------- 1193237
这是任务1 1193238 --------- 1193237
这是任务2 1193239 --------- 1193237
这是任务1 1193238 --------- 1193237
这是任务1 1193238 --------- 1193237
这是任务2 1193239 --------- 1193237
这是任务1 1193238 --------- 1193237
Process之args
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
def task1(s,name):
while True:
sleep(s)
print('这是任务1',os.getpid(),'---------',os.getppid(),name)
def task2(s,name):
while True:
sleep(s)
print('这是任务2',os.getpid(),'---------',os.getppid(),name)
if __name__ == '__main__':
print(os.getpid())
p1=Process(target=task1,name='任务1',args=(1,'aa'))
p1.start()
print(p1.name)
p2=Process(target=task2,name='任务2',args=(2,'bb'))
p2.start()
print(p2.name)
[root@ceph01 python]# python3 multi.py
1193613
任务1
任务2
这是任务1 1193614 --------- 1193613 aa
这是任务1 1193614 --------- 1193613 aa
这是任务2 1193615 --------- 1193613 bb
这是任务1 1193614 --------- 1193613 aa
这是任务1 1193614 --------- 1193613 aa
这是任务2 1193615 --------- 1193613 bb
终止进程
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
def task1(s,name):
while True:
sleep(s)
print('这是任务1',os.getpid(),'---------',os.getppid(),name)
def task2(s,name):
while True:
sleep(s)
print('这是任务2',os.getpid(),'---------',os.getppid(),name)
number=1
if __name__ == '__main__':
print(os.getpid())
p1=Process(target=task1,name='任务1',args=(1,'aa'))
p1.start()
print(p1.name)
p2=Process(target=task2,name='任务2',args=(2,'bb'))
p2.start()
print(p2.name)
while True:
sleep(0.2)
number += 1
if number == 20:
p1.terminate()
p2.terminate()
break
else:
print(number)
[root@ceph01 python]# python3 multi.py
1272342
任务1
任务2
2
3
4
5
这是任务1 1272343 --------- 1272342 aa
6
7
8
9
10
这是任务1 1272343 --------- 1272342 aa
11
这是任务2 1272344 --------- 1272342 bb
12
13
14
15
这是任务1 1272343 --------- 1272342 aa
16
17
18
19
进程对全局变量的访问
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
m=1
def task1(s):
global m
while True:
sleep(s)
m+=1
print('这是任务1,全局变量m的值是',m)
def task2(s):
global m
while True:
sleep(s)
m+=1
print('这是任务2,全局变量m的值是',m)
number=1
if __name__ == '__main__':
print(os.getpid())
p1=Process(target=task1,name='任务1',args=(1,))
p1.start()
#print(p1.name)
p2=Process(target=task2,name='任务2',args=(2,))
p2.start()
#print(p2.name)
# while True:
# sleep(0.2)
# number += 1
# if number == 20:
# p1.terminate()
# p2.terminate()
# break
# else:
# print(number)
[root@ceph01 python]# python3 multi.py
1275419
这是任务1,全局变量m的值是 2
这是任务1,全局变量m的值是 3
这是任务2,全局变量m的值是 2
这是任务1,全局变量m的值是 4
这是任务1,全局变量m的值是 5
这是任务2,全局变量m的值是 3
这是任务1,全局变量m的值是 6
可以看到,每个进程都有自己的变量m,不会影响其他进程的m值。
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
m=1
def task1(s):
global m
while True:
sleep(s)
m+=1
print('这是任务1,全局变量m的值是',m)
def task2(s):
global m
while True:
sleep(s)
m+=1
print('这是任务2,全局变量m的值是',m)
number=1
if __name__ == '__main__':
print(os.getpid())
p1=Process(target=task1,name='任务1',args=(1,))
p1.start()
#print(p1.name)
p2=Process(target=task2,name='任务2',args=(2,))
p2.start()
#print(p2.name)
while True:
sleep(1)
m += 1
print('main进程的m值是:',m)
[root@ceph01 python]# python3 multi.py
1275670
main进程的m值是: 2
这是任务1,全局变量m的值是 2
main进程的m值是: 3
这是任务1,全局变量m的值是 3
这是任务2,全局变量m的值是 2
main进程的m值是: 4
这是任务1,全局变量m的值是 4
main进程的m值是: 5
这是任务1,全局变量m的值是 5
这是任务2,全局变量m的值是 3
main进程的m值是: 6
这是任务1,全局变量m的值是 6
main进程的m值是: 7
这是任务1,全局变量m的值是 7
这是任务2,全局变量m的值是 4
cat multi.py
#!/usr/bin/env python3
#coding:utf8
from multiprocessing import Process
from time import sleep
import os
m=1
list1=[]
def task1(s):
global m
while True:
sleep(s)
m+=1
list1.append(str(m)+'task1')
print('这是任务1,全局变量m的值是',m,list1)
def task2(s):
global m
while True:
sleep(s)
m+=1
list1.append(str(m)+'task2')
print('这是任务2,全局变量m的值是',m,list1)
number=1
if __name__ == '__main__':
print(os.getpid())
p1=Process(target=task1,name='任务1',args=(1,))
p1.start()
#print(p1.name)
p2=Process(target=task2,name='任务2',args=(2,))
p2.start()
#print(p2.name)
while True:
sleep(1)
m += 1
print('main进程的m值是:',m)
[root@ceph01 python]# python3 multi.py
1275931
main进程的m值是: 2
这是任务1,全局变量m的值是 2 ['2task1']
main进程的m值是: 3
这是任务2,全局变量m的值是 2 ['2task2']
这是任务1,全局变量m的值是 3 ['2task1', '3task1']
main进程的m值是: 4
这是任务1,全局变量m的值是 4 ['2task1', '3task1', '4task1']
main进程的m值是: 5
这是任务2,全局变量m的值是 3 ['2task2', '3task2']
这是任务1,全局变量m的值是 5 ['2task1', '3task1', '4task1', '5task1']
main进程的m值是: 6
这是任务1,全局变量m的值是 6 ['2task1', '3task1', '4task1', '5task1', '6task1']
main进程的m值是: 7
这是任务2,全局变量m的值是 4 ['2task2', '3task2', '4task2']
这是任务1,全局变量m的值是 7 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1']
main进程的m值是: 8
这是任务1,全局变量m的值是 8 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1', '8task1']
main进程的m值是: 9
这是任务2,全局变量m的值是 5 ['2task2', '3task2', '4task2', '5task2']
这是任务1,全局变量m的值是 9 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1', '8task1', '9task1']
main进程的m值是: 10
这是任务1,全局变量m的值是 10 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1', '8task1', '9task1', '10task1']
main进程的m值是: 11
这是任务2,全局变量m的值是 6 ['2task2', '3task2', '4task2', '5task2', '6task2']
这是任务1,全局变量m的值是 11 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1', '8task1', '9task1', '10task1', '11task1']
main进程的m值是: 12
这是任务1,全局变量m的值是 12 ['2task1', '3task1', '4task1', '5task1', '6task1', '7task1', '8task1', '9task1', '10task1', '11task1', '12task1']