Python 进程方法

不采用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']

猜你喜欢

转载自blog.csdn.net/weixin_40548182/article/details/112318016