當前位置:首頁 » 編程語言 » python3進程

python3進程

發布時間: 2022-08-28 19:20:49

① 關於python3 taskkill結束進程

#你這是dos命令好吧,不是這樣用的,在python中要用方法調用

importos
os.system("doscommand")

② python3 進程池pool使用失敗

第一個進程的時候你建文件的時候用os.open(『your_lockfile』,os.O_CREAT|os.O_EXCL|os.O_RDWR) 第二個進程里你先看這個文件有沒有,如果有就try刪除它,然後except OSError as e,如果e.errno==13就說明有第一個進程在運行。

③ python3 進程池pool=5:我有100個任務要執行

不需要,執行完了一個任務,進程會返回池中待命

④ python3.4.3 多進程之間結果變數的傳遞問題,程序無任何結果輸出

多進程間共享的變數要使用特殊的數據結構,在multiprocessing包里有提供,常用的有Queue, Value, Array等,這里比較適合用Queue

修改後的程序如下,注意Result賦值,和ProcessCheck的參數

另外,Result要排序後輸出的話,要用循環從Queue取值構建list再排序,這里省略了

importdatetime
importsys
importtime
importmultiprocessing
PartStart=[]#每個process計算的起點
PartEnd=[]#每個process計算的終點
Result=multiprocessing.Queue()#所有結果存儲在Result數組中
ProcessCount=10#進程數
EndNum=9999999#計算范圍,默認100開始,終止數可以任意修改,大於100即可

print('Start:%s'%datetime.datetime.now().strftime("%Y/%d/%m%H:%M:%S"))
start=time.time()

d=int(((EndNum-99)/ProcessCount)+0.5)
foriinrange(ProcessCount):
PartStart.append(100+i*d)
PartEnd.append(PartStart[i]+d-1)
PartEnd[ProcessCount-1]=EndNum
#==========================================
#這段代碼只是計算每個process的計算起點和終點

defCheckNum(Number):
tmp=str(Number)
len_num=len(tmp)
sum_num=0
foriinrange(len_num):
sum_num=sum_num+(int(tmp[i])**len_num)
ifsum_num==int(Number):
returnTrue
#print(Number,"是水仙花數")
else:
returnFalse
#print(Number,"不是水仙花數")
defProcessCheck(Start,End,Result):
forjinrange(int(Start),int(End)+1):
ifCheckNum(j):
#print(j,"是水仙花數")
print("helloworld")
Result.put(str(j)+"是水仙花數")
#============================================
#這段代碼用於計算某數值區間內的水仙花數,並存儲進result數組中,也是每個process運行的代碼

defmain():
threads=[]
foriinrange(ProcessCount):
p=multiprocessing.Process(target=ProcessCheck,args=(PartStart[i],PartEnd[i],Result))
threads.append(p)
foriinrange(ProcessCount):
threads[i].start()
foriinrange(ProcessCount):
threads[i].join()
#Result.sort(key=lambdat:t[0])
foriinrange(Result.qsize()):
print(Result.get())
#將最後的結果排序輸出,但沒有任何結果出現
end=time.time()
input('End:%s'%datetime.datetime.now().strftime("%Y/%d/%m%H:%M:%S")+" "+"共耗時:"+str(end-start))
#這個input沒有任何意義,主要是防止程序直接結束退出
if__name__=='__main__':
main()

⑤ win7 64位電腦 python3軟體安裝包雙擊沒反應,進程里會閃現,但是立刻就沒有了

1.我的電腦-管理-服務 ,這個列表裡有個windows installer的服務,禁用後重啟,試試能不能安裝。
2.如果是win7旗艦版(因為某些win7不支持),打開組策略編輯器(gpedit.msc)。
依次點擊展開」計算機配置「---「管理模板」---「windows組件」---「windows installer」
還是禁用掉,重啟試試。
希望能幫到。

⑥ Python中進程與線程的區別是什麼

Num01–>線程

線程是操作系統中能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。

一個線程指的是進程中一個單一順序的控制流。

一個進程中可以並發多條線程,每條線程並行執行不同的任務。

Num02–>進程

進程就是一個程序在一個數據集上的一次動態執行過程。

進程有以下三部分組成:

1,程序:我們編寫的程序用來描述進程要完成哪些功能以及如何完成。
2,數據集:數據集則是程序在執行過程中需要的資源,比如圖片、音視頻、文件等。
3,進程式控制制塊:進程式控制制塊是用來記錄進程的外部特徵,描述進程的執行變化過程,系統可以用它來控制和管理進程,它是系統感知進程存在的唯一標記。

Num03–>進程和線程的區別:

1、運行方式不同:

進程不能單獨執行,它只是資源的集合。

進程要操作CPU,必須要先創建一個線程。

所有在同一個進程里的線程,是同享同一塊進程所佔的內存空間。

2,關系

進程中第一個線程是主線程,主線程可以創建其他線程;其他線程也可以創建線程;線程之間是平等的。

進程有父進程和子進程,獨立的內存空間,唯一的標識符:pid。

3,速度

啟動線程比啟動進程快。

運行線程和運行進程速度上是一樣的,沒有可比性。

線程共享內存空間,進程的內存是獨立的。

4,創建

父進程生成子進程,相當於復制一份內存空間,進程之間不能直接訪問

創建新線程很簡單,創建新進程需要對父進程進行一次復制。

一個線程可以控制和操作同級線程里的其他線程,但是進程只能操作子進程。

5,交互

同一個進程里的線程之間可以直接訪問。

兩個進程想通信必須通過一個中間代理來實現。

相關推薦:《Python視頻教程》

Num04–>幾個常見的概念

1,什麼的並發和並行?

並發:微觀上CPU輪流執行,宏觀上用戶看到同時執行。因為cpu切換任務非常快。

並行:是指系統真正具有同時處理多個任務(動作)的能力。

2,同步、非同步和輪詢的區別?

同步任務:B一直等著A,等A完成之後,B再執行任務。(打電話案例)

輪詢任務:B沒有一直等待A,B過一會來問一下A,過一會問下A

非同步任務:B不需要一直等著A, B先做其他事情,等A完成後A通知B。(發簡訊案例)

Num05–>進程和線程的優缺點比較

首先,要實現多任務,通常我們會設計Master-Worker模式,Master負責分配任務,Worker負責執行任務,因此,多任務環境下,通常是一個Master,多個Worker。

如果用多進程實現Master-Worker,主進程就是Master,其他進程就是Worker。

如果用多線程實現Master-Worker,主線程就是Master,其他線程就是Worker。

多進程模式最大的優點就是穩定性高,因為一個子進程崩潰了,不會影響主進程和其他子進程。(當然主進程掛了所有進程就全掛了,但是Master進程只負責分配任務,掛掉的概率低)著名的Apache最早就是採用多進程模式。

多進程模式的缺點是創建進程的代價大,在Unix/linux系統下,用fork調用還行,在Windows下創建進程開銷巨大。另外,操作系統能同時運行的進程數也是有限的,在內存和CPU的限制下,如果有幾千個進程同時運行,操作系統連調度都會成問題。

多線程模式通常比多進程快一點,但是也快不到哪去,而且,多線程模式致命的缺點就是任何一個線程掛掉都可能直接造成整個進程崩潰,因為所有線程共享進程的內存。在Windows上,如果一個線程執行的代碼出了問題,你經常可以看到這樣的提示:「該程序執行了非法操作,即將關閉」,其實往往是某個線程出了問題,但是操作系統會強制結束整個進程。

在Windows下,多線程的效率比多進程要高,所以微軟的IIS伺服器默認採用多線程模式。由於多線程存在穩定性的問題,IIS的穩定性就不如Apache。為了緩解這個問題,IIS和Apache現在又有多進程+多線程的混合模式,真是把問題越搞越復雜。

Num06–>計算密集型任務和IO密集型任務

是否採用多任務的第二個考慮是任務的類型。我們可以把任務分為計算密集型和IO密集型。

第一種:計算密集型任務的特點是要進行大量的計算,消耗CPU資源,比如計算圓周率、對視頻進行高清解碼等等,全靠CPU的運算能力。這種計算密集型任務雖然也可以用多任務完成,但是任務越多,花在任務切換的時間就越多,CPU執行任務的效率就越低,所以,要最高效地利用CPU,計算密集型任務同時進行的數量應當等於CPU的核心數。

計算密集型任務由於主要消耗CPU資源,因此,代碼運行效率至關重要。Python這樣的腳本語言運行效率很低,完全不適合計算密集型任務。對於計算密集型任務,最好用C語言編寫。

第二種:任務的類型是IO密集型,涉及到網路、磁碟IO的任務都是IO密集型任務,這類任務的特點是CPU消耗很少,任務的大部分時間都在等待IO操作完成(因為IO的速度遠遠低於CPU和內存的速度)。對於IO密集型任務,任務越多,CPU效率越高,但也有一個限度。常見的大部分任務都是IO密集型任務,比如Web應用。

IO密集型任務執行期間,99%的時間都花在IO上,花在CPU上的時間很少,因此,用運行速度極快的C語言替換用Python這樣運行速度極低的腳本語言,完全無法提升運行效率。對於IO密集型任務,最合適的語言就是開發效率最高(代碼量最少)的語言,腳本語言是首選,C語言最差。

相關推薦:

Python中的進程是什麼

⑦ 一文帶你讀懂Python中的進程

進程

進程(Process)是計算機中的程序關於某數據集合上的一次運行,即正在運行的程序,是系統進行資源分配和調度的基本單位,進程是對正在運行程序的一個抽象,在早期面向進程設計的計算機結構中,進程是程序的基本執行實體,在當代面向線程設計的計算機結構中,進程是線程的容器,線程是執行的實體。進程的概念起源於操作系統,是操作系統最核心的概念,操作系統的其他所有內容都是圍繞進程的概念展開的。

在早期計算機中可以利用的cpu只有一個,為了充分利用CPU性能,提高用戶操作體驗,出現了多道技術。將一個單獨的cpu虛擬成多個cpu(多道技術:時間多路復用和空間多路復用+硬體上支持隔離),即使在一個單核CPU也能保證支持(偽)並發的能力。如果沒有進程的抽象,現代計算機將不復存在。

狹義定義:進程是正在運行的程序的實例(an instance of a computer program that is being executed)。

廣義定義:進程是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動。它是操作系統動態執行的基本單元,在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。

操作系統的作用:

隱藏復雜的硬體介面,提供良好的抽象介面。

管理、調度進程,使多個進程對硬體的競爭變得有序。

多道技術:針對早期單核CPU,實現多個程序的並發執行,現在的主機一般是多核,每個核都會利用多道技術,如有4個cpu,運行於cpu1的某個程序遇到io阻塞,會等到io結束再重新調度,重新調度是可能會被調度到4個cpu中的任意一個,具體由操作系統調度演算法決定。

多道技術的主要特性如下:

(1)空間上的復用:內存中可以同時有多道程序。

(2)物理隔離:多個程序在內存中都有各自獨立的內存空間,互不影響。

(3)時間上的復用:多個程序在操作系統的調度演算法下,在不同的時間段內分別佔有CPU資源。

需要注意的是如果一個進程長時間佔用CPU資源,操作系統會強制將CPU資源分配給其它在就緒隊列中的程序,避免一個程序長時間佔有CPU資源,導致其它程序無法運行。

相關推薦:《Python視頻教程》

關於進程的一些概念:

第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區域(text region)、數據區域(data region)和堆棧(stack region)。文本區域存儲處理器執行的代碼,數據區域存儲變數和進程執行期間使用的動態分配的內存,堆棧區域存儲著活動過程調用的指令和本地變數。

第二,進程是一個「執行中的程序」。程序是一個沒有生命的實體,只有處理器賦予程序生命時(操作系統將程序載入到內存),它才能成為一個活動的實體,我們稱其為進程。

進程是操作系統中最基本、重要的概念。是多道程序系統出現後,為了刻畫系統內部出現的動態情況,描述系統內部各道程序的活動規律引進的一個概念,所有多道程序設計操作系統都建立在進程的基礎上。

進程的特性:

動態性:進程的實質是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。

並發性:任何進程都可以同其他進程一起並發執行

獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位;

非同步性:由於進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進

結構特徵:進程由程序、數據和進程式控制制塊三部分組成。

多個不同的進程可以包含相同的程序,一個程序在不同的數據集里就構成不同的進程,能得到不同的結果,但是執行過程中,程序不能發生改變。

進程與程序的區別:

程序是指令和數據的有序集合,是對指令、數據及其組織形式的描述,其本身沒有任何運行的含義,是一個靜態的概念。而進程是程序在處理機上的一次執行過程,它是一個動態的概念。

程序可以作為一種軟體資料長期存在,而進程是有一定生命期的。程序是永久的,進程是暫時的。

進程的調度:

要想多個進程交替運行,操作系統必須對這些進程進行調度,這個調度也不是隨機進行的,而是需要遵循一定的法則,由此就有了進程的調度演算法。

1、先來先服務演算法

先來先服務(FCFS)調度演算法是一種最簡單的調度演算法,該演算法既可用於作業調度,也可用於進程調度。FCFS演算法比較有利於長作業(進程),而不利於短作業(進程)。由此可知,本演算法適合於CPU繁忙型作業,而不利於I/O繁忙型的作業(進程)。

2、短作業優先調度演算法

短作業(進程)優先調度演算法(SJ/PF)是指對短作業或短進程優先調度的演算法,該演算法既可用於作業調度,也可用於進程調度。但其對長作業不利;不能保證緊迫性作業(進程)被及時處理;作業的長短只是被估算出來的。

3、時間片輪轉法

時間片輪轉(Round Robin,RR)法的基本思路是讓每個進程在就緒隊列中的等待時間與享受服務的時間成比例。在時間片輪轉法中,需要將CPU的處理時間分成固定大小的時間片,例如,幾十毫秒至幾百毫秒。如果一個進程在被調度選中之後用完了系統規定的時間片,但又未完成要求的任務,則它自行釋放自己所佔有的CPU而排到就緒隊列的末尾,等待下一次調度。同時,進程調度程序又去調度當前就緒隊列中的第一個進程。

顯然,輪轉法只能用來調度分配一些可以搶占的資源。這些可以搶占的資源可以隨時被剝奪,而且可以將它們再分配給別的進程。CPU是可搶占資源的一種。但列印機等資源是不可搶占的。由於作業調度是對除了CPU之外的所有系統硬體資源的分配,其中包含有不可搶占資源,所以作業調度不使用輪轉法。

在輪轉法中,時間片長度的選取非常重要。首先,時間片長度的選擇會直接影響到系統的開銷和響應時間。如果時間片長度過短,則調度程序搶占處理機的次數增多。這將使進程上下文切換次數也大大增加,從而加重系統開銷。反過來,如果時間片長度選擇過長,例如,一個時間片能保證就緒隊列中所需執行時間最長的進程能執行完畢,則輪轉法變成了先來先服務法。時間片長度的選擇是根據系統對響應時間的要求和就緒隊列中所允許最大的進程數來確定的。

在輪轉法中,加入到就緒隊列的進程有3種情況:

(1)一種是分給它的時間片用完,但進程還未完成,回到就緒隊列的末尾等待下次調度去繼續執行。

(2)另一種情況是分給該進程的時間片並未用完,只是因為請求I/O或由於進程的互斥與同步關系而被阻塞。當阻塞解除之後再回到就緒隊列。

(3)第三種情況就是新創建進程進入就緒隊列。

如果對這些進程區別對待,給予不同的優先順序和時間片從直觀上看,可以進一步改善系統服務質量和效率。例如,我們可把就緒隊列按照進程到達就緒隊列的類型和進程被阻塞時的阻塞原因分成不同的就緒隊列,每個隊列按FCFS原則排列,各隊列之間的進程享有不同的優先順序,但同一隊列內優先順序相同。這樣,當一個進程在執行完它的時間片之後,或從睡眠中被喚醒以及被創建之後,將進入不同的就緒隊列。

多級反饋隊列:

前面介紹的各種用作進程調度的演算法都有一定的局限性。如短進程優先的調度演算法,僅照顧了短進程而忽略了長進程,而且如果並未指明進程的長度,則短進程優先和基於進程長度的搶占式調度演算法都將無法使用。

而多級反饋隊列調度演算法則不必事先知道各種進程所需的執行時間,而且還可以滿足各種類型進程的需要,因而它是目前被公認的一種較好的進程調度演算法。在採用多級反饋隊列調度演算法的系統中,調度演算法的實施過程如下所述。

(1) 應設置多個就緒隊列,並為各個隊列賦予不同的優先順序。第一個隊列的優先順序最高,第二個隊列次之,其餘各隊列的優先權逐個降低。該演算法賦予各個隊列中進程執行時間片的大小也各不相同,在優先權愈高的隊列中,為每個進程所規定的執行時間片就愈小。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍,……,第i+1個隊列的時間片要比第i個隊列的時間片長一倍。

(2) 當一個新進程進入內存後,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,便可准備撤離系統;如果它在一個時間片結束時尚未完成,調度程序便將該進程轉入第二隊列的末尾,再同樣地按FCFS原則等待調度執行;如果它在第二隊列中運行一個時間片後仍未完成,再依次將它放入第三隊列,……,如此下去,當一個長作業(進程)從第一隊列依次降到第n隊列後,在第n 隊列便採取按時間片輪轉的方式運行。

(3) 僅當第一隊列空閑時,調度程序才調度第二隊列中的進程運行;僅當第1~(i-1)隊列均空時,才會調度第i隊列中的進程運行。如果處理機正在第i隊列中為某進程服務時,又有新進程進入優先權較高的隊列(第1~(i-1)中的任何一個隊列),則此時新進程將搶占正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i隊列的末尾,把處理機分配給新到的高優先權進程。

⑧ python3與子進程通訊,怎麼傳輸值

ubuntu下,也就是linux下,通常會用kill -事件編號實現。 你查一下LINUX下的事件就明白了。 kill進程號 實現上是發了一個信號給指定的進程。 在python里,也可以載入事件處理模塊,處理來自其它程序發過來的信號

⑨ Python3多進程運行返回值怎麼獲得

frommultiprocessingimportPool
importtime
defwork(n):
print('開工啦...')
time.sleep(3)
returnn**2

if__name__=='__main__':
q=Pool()

#非同步apply_async用法:如果使用非同步提交的任務,主進程需要使用jion,等待進程池內任務都處理完,然後可以用get收集結果,否則,主進程結束,進程池可能還沒來得及執行,也就跟著一起結束了
res=q.apply_async(work,args=(2,))
q.close()
q.join()#join在close之後調用
print(res.get())

#同步apply用法:主進程一直等apply提交的任務結束後才繼續執行後續代碼
#res=q.apply(work,args=(2,))
#print(res)

熱點內容
用戶訪問表空間 發布:2025-01-16 20:07:07 瀏覽:943
java代碼自動編譯 發布:2025-01-16 19:58:14 瀏覽:313
編程很困難 發布:2025-01-16 19:58:09 瀏覽:673
gg登錄源碼 發布:2025-01-16 19:58:07 瀏覽:292
微信收藏表情文件夾 發布:2025-01-16 19:28:57 瀏覽:15
ra伺服器搭建 發布:2025-01-16 19:28:12 瀏覽:18
javaftp讀取 發布:2025-01-16 19:28:02 瀏覽:185
樂課上傳作業 發布:2025-01-16 19:24:58 瀏覽:936
哈爾濱python培訓 發布:2025-01-16 19:19:30 瀏覽:915
java對象與線程 發布:2025-01-16 19:14:59 瀏覽:897