網絡編程 ----------進程
阿新 • • 發佈:2017-12-01
專用 and join() 實現 命名 async term mina 守護
1 隊列 (管道 + 鎖 》》》先進先出) queue
增加計算機的數量,並沒有提高計算機的性能
比Queue 多了兩個函數,一個是task_done,另一個join,都是專用於全球性進行 編程的,大多數用於生產者和消費者之間的。
join : 是說Queue裏面的生產數據全部處理完了
multiprocessing 模塊
功能:
支持多進程 ,提供了Process(創建子進程)/ Queue(隊列)lock(鎖)
與線程不同,進程沒有任何共享狀態,進程修改數據僅限於該進程內
Process([group[,) 該類字例化得到一個對象,表示一個了進程中的任務
強調:
需要用關鍵字的方式來指定參數
args指定的為傳給target函數的位置參數,是一個元組形式,必須有逗號
p.start(): 啟動進程,並調用該子進程中的p.run()#(方法)
p.terminate():強制終止進程p,不會進行任何清理操作(僵屍進程)
p.join 主線程等待p終止
p.daemon: 守護進程
守護進程
1主進程代碼結束後終止
2守護進程無法開啟了進程,否則拋出異常
同步鎖:
共享的內存空間
with 功能 和文件操作的IO一樣
with lock:
get(n)
def task(n,lock):
search(n):
lock.acquire() 加鎖
get(n)
lock.release() 開鎖
IPC機制(進程之間的交互)
1 多進程之間內存共享
2 競爭帶來的不安全 >>>加鎖
方式 :
1 隊列 (管道 + 鎖 》》》先進先出) queue
2 管道
進程
抽象單位
是一個資源單位
默認一個線程
進程池
控制進程的數目
進程池同步調用
提交一個任務,等到任務結束後才能執行下一個任務
apply: 傳入兩個參數,第一個指定,第二個向進程池提交任務實現後立馬拿到結果
import multiprocessing
import time
import random import osdef walk(n): print(‘%s is walk‘%os.getpid()) time.sleep(random.random()) return n if __name__ == ‘__main__‘: p = multiprocessing.Pool(4) for i in range(5): q = p.apply(walk,args=(i,)) print(q)
進程池異步提交
提交完一個任務過後不會在原地等待,而是把所有任務提交完後用get獲取
apply_async: 向進程池提交任務,只管提交任務不管執行,
執行方法: close: 結束任務
join :等待進程池不在提交任務,並且任務結束和計算個數
get : 獲取返回值
import multiprocessing
import time
import random
import os
def walk(n):
print(‘%s is walking‘%os.getpid())
time.sleep(2)
return n
if __name__ == ‘__main__‘:
p = multiprocessing.Pool(4)
li=[]
for i in range(6):
q = p.apply_async(walk,args=(i,))
li.append(q)
p.close()
p.join()
for i in li:
print(i.get())
異步調用
提交完任務,不用在原地等待
命名空間是用來存儲數據的在內存裏
水平擴展
增加計算機的數量,並沒有提高計算機的性能
虛擬化
同時跑多個系統
分布式和集中式
集中式在一臺機器上執行任務
分布式將任務分散到多臺機器上
joinableQueue模塊
比Queue 多了兩個函數,一個是task_done,另一個join,都是專用於全球性進行 編程的,大多數用於生產者和消費者之間的。
task_done: 是用於在get後面的,告訴os已經處理完了內容
join : 是說Queue裏面的生產數據全部處理完了
OS 模塊:
1. os.name——判斷現在正在實用的平臺,Windows 返回 ‘nt‘; Linux 返回’posix‘
2. os.getcwd()——得到當前工作的目錄。
3. os.listdir()——指定所有目錄下所有的文件和目錄
4.os.getpid() ------查看進程的序列號
網絡編程 ----------進程