Python 3学习 ——Python 多进程与编码
Posted jinzejun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 3学习 ——Python 多进程与编码相关的知识,希望对你有一定的参考价值。
Python 学习——Python 编码
写此博客 是为了激励自己,并且将自己的心得以及遇到的问题与人分享
一、进程
1.概述
multiprocessing 包是 Python 中的多进程管理包。与 thread.Threading 类似,可以利用 multiprocessing 对象来创建一个进程。该 Processing 对象与 Thread 对象的用法相同,也有 start() run() join() 的方法。具体使用看下面代码实现。使用这些 API 的时候有如下几点注意事项:
- 十分有必要对每个 Process 对象调用 join() 方法,阻止进程成为僵尸进程的一个手段。在多线程中由于只有一个进程,所以不需要采用这种手段。
- 两个进程之间不能够共享数据,如果想共享数据要有一个第三方来对两者进行沟通共享。优先使用 Pipe 和 Queue ,避免使用 Lock / Event / Semaphone / Condition 等同步方式。
- Windows 系统下,要想启动一个子进程,必须加上 If __name__ == "__main__": ,进程相关的要写在这句下面。
1 #author:"LFD" 2 #date: 2018/6/8 3 from multiprocessing import Process 4 import time 5 6 def f(name): 7 time.sleep(1) 8 print(‘hello‘,name,time.ctime()) 9 10 if __name__ == "__main__": 11 p_list = [] 12 for i in range(3): 13 p = Process(target=f,args=(‘liufeiduo‘,)) # 创建进程 14 p_list.append(p) 15 p.start() 16 for p in p_list: 17 p.join() 18 19 print(‘jincheng end!‘) 20 21 ‘‘‘ # 运行结果: 22 hello liufeiduo Fri Jun 8 11:15:46 2018 23 hello liufeiduo Fri Jun 8 11:15:46 2018 24 hello liufeiduo Fri Jun 8 11:15:46 2018 25 jincheng end! 26 ‘‘‘
上面是通过方法实现多进程;
下面是通过调用类实现多进程;
1 from multiprocessing import Process 2 import time 3 4 class MyProcess(Process): 5 def __init__(self,name): 6 super(MyProcess,self).__init__() 7 self.name = name 8 def run(self): 9 time.sleep(1) 10 print(‘hello‘,self.name,time.ctime()) 11 12 if __name__ == ‘__main__‘: 13 p_list = [] 14 for i in range(3): 15 p = MyProcess(‘liufeiduo‘) 16 p.start() 17 p_list.append(p) 18 19 for p in p_list: 20 p.join() 21 22 print(‘end‘)
2.进程关系
1 from multiprocessing import Process 2 import os,time 3 4 def info(title): 5 print(title) 6 print(‘module name:‘,__name__) 7 print(‘parent process:‘,os.getppid()) 8 print(‘process id:‘,os.getpid()) 9 10 def f(name): 11 pass 12 13 if __name__ == ‘__main__‘: 14 info(‘