1. 程式人生 > >Python 3學習 ——Python 多進程與編碼

Python 3學習 ——Python 多進程與編碼

管理 nbsp author 如果 phone auth TE alt hid

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 ‘‘‘
creat jincheng_1

上面是通過方法實現多進程;

下面是通過調用類實現多進程;

技術分享圖片
 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)
creat jincheng_2

  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(\033[32;1mmain process line\033[0m)
15     time.sleep(5)
16     p = Process(target=info,args=(bob,))
17     p.start()
18     p.join()
19 
20 
21 
22 ‘‘‘ 運行結果:
23 main process line
24 module name: __main__
25 parent process: 7708     7708 是Pycharm 在電腦上分得的進程ID
26 process id: 13972
27 bob
28 module name: __mp_main__
29 parent process: 13972
30 process id: 6024
31 
32 ‘‘‘
jincheng relationship

二、Python2 和 Python3 的編碼

  編碼:基本概念很簡單。首先,我們從一段信息即消息說起,消息以人類可以理解、易懂的表示存在。我打算將這種表示稱為“明

文”(plain text)。對於說英語的人,紙張上打印的或屏幕上顯示的英文單詞都算作明文。

其次,我們需要能將明文表示的消息轉成另外某種表示,我們還需要能將編碼文本轉回成明文。從明文到編碼文本的轉換稱為“編碼”,從編碼

文本又轉回成明文則為“解碼”。

技術分享圖片

Python 3學習 ——Python 多進程與編碼