1. 程式人生 > >python知識點相關筆記

python知識點相關筆記

程序
概念
一個服務上執行著多個任務
在電腦的執行中
同一時間可以執行很多程式
每一個程式都會佔用一定的CPU
只有程式在服務上執行起來,才算是程序
簡單來說,程序就是程式的一次執行
時間片輪轉
單核cpu不是同時執行很多個程序
只是切換時間夠快
併發
程序數大於CPU核數
並行
程序數小於CPU的核數
一般情況都是併發
定義
程式 : 是一個指令的集合
程序 : 是一個正在執行的程式(靜態的概念)
程序是程式的一次靜態執行過程,佔用特定的地址空間
每個程序都是獨立的,分為三部分 cpu、data、code
缺點 : 記憶體的浪費,CPU的負擔
分時處理
CPU在執行多程序的時候採用的是分時處理機制
分時處理機制就是把時間分成極小的單位
比如說是個任務,每個任務做1毫秒
我們根本看不出來多程序的執行方式
由於CPU的速度太快和分時處理,所以我們看到的程式就像是同時執行一樣
主要設計模組
import os : 程序的資料
from multiprocessing improt Process : 建立程序
time : 時間模組
from multiprocessing improt Pool : 程序池
建立程序
引入包
再引入os包
或者直接將multiprocessing全部都引入進來
引入 multiprocessing包中的Process類
創建出子程序要執行的程式碼
建立一個函式
函式中執行檢測建立子程序的程式碼
判斷測試程式碼
輸出父程序的ID
例項化類,建立一個子程序
啟動程序
實現程序的同步
檢測程序同步的輸出
例項
from multiprocessing import Process
import os
#將要執行的程式碼,用來輸出建立的額子程序
def zjc(name):
#輸出子程序的ID
print(‘這是紫禁城的程式碼,他的引數是%s,子程序的ID是%d’%(name,os.getpid()))
#建立一個函式,進行建立一個子程序
if name

== ‘main’:
#輸出父程序的ID
print(‘這是父程序的程式碼,他的ID為%d’%(os.getpid()))
#例項化引入的包,建立子程序
#第一個引數傳入函式的名字,需要呼叫的函式,也就是建立子程序的同時檢測子程序的程式碼
#第二個引數傳入的是一個元組 元組中的元素就是呼叫函式中的引數
p = Process(target=zjc,args=(‘grandmather’,))
#啟動程序
p.start()
#實現程序的同步,等待所有的程序都退出,所有的程序都退出以後,程式碼再向下執行
p.join()
print(‘asd’)
Process常用成員
name : 建立的子程序的名字
from multiprocessing import Process

import time

import os

def zjc(name):
print(“這是子程序%s,子程序的ID為:%d”%(name,os.getpid()))

if name == ‘main’:
print(“當前程序ID為:%d”%(os.getpid()))
p = Process(target=zjc,args=(‘asd’,),name=“asdasdasd”)
p.start()
p.join()
print(“子程序的名字為:%s%d”%(p.name,p.pid))
print(“game over”)

		time.sleep(2)  :  休眠兩秒鐘
	子類化Process  :  就是將程序封裝到類中
		from multiprocessing import Process

import os

import time

class MyProcess(Process):
def init(self,intval):
super().init()
self.intval = intval

def run(self):
    startTime = time.time()
    time.sleep(self.intval)
    endTime = time.time()
    print("子程序的ID為:%d,父程序的ID為:%d,建立程序所用時間為:%d"%(os.getpid(),os.getppid(),endTime-startTime))

if name == ‘main’:
head = time.time()
p = MyProcess(2)
p.start()
p.join()
foot = time.time()
t = foot - head
print(‘程序結束,所用時間%d秒’%(t))
建立多個程序
將例項化的過程迴圈展示
迴圈的方式開啟程序
例項
from multiprocessing import Process

import os

import time

class MyProcess(Process):
def init(self,intval):
super().init()
self.intval = intval

def run(self):
    startTime = time.time()
    time.sleep(self.intval)
    endTime = time.time()
    print("子程序的ID為:%d,父程序的ID為:%d,建立程序所用時間為:%d"%(os.getpid(),os.getppid(),endTime-startTime))

if name == ‘main’:
head = time.time()
for i in range(5):
p = MyProcess(i+1)
p.start()
p.join()
foot = time.time()
t = foot - head
print(‘程序結束,所用時間%d秒’%(t))

	程序池
		程序的同步非同步
			同步  :  我們把非同步環境下的一組併發程序因直接制約而互相傳送訊息、進行互相合作、互相等待,使得各程序按一定的速度執行的過程稱為程序間的同步
			同步  :  apply
			非同步  :  apply_async
			非同步  :  一個可以無需等待被呼叫函式的返回值就讓操作繼續進行的方法
			程序池的容量是3   但是我需要建立10個程序   同步需要一個一個建立    非同步我可以直接不用等待   建立三個
		建立程序池
			匯入包
				from  multiprocessing  import  Pool
				import  time
				import  os
			建立程序池,建立程序
			建立程序引數函式
			關閉資源,程序同步等
			例項
				from multiprocessing import Pool

import os

import time

#建立程序引數
def worker(msg):
print(“程序已經建立,程序的ID是%d”%os.getpid())
startTime = time.time()
time.sleep(2)
endTime = time.time()
print("====================程序已經結束,總共時長為%d秒"%(endTime-startTime))

#建立程序池
if name == ‘main’:
pool = Pool(3)
for i in range(10):
pool.apply_async(worker,(i,))

pool.close()
pool.join()
print("所有程式執行結束")