python多程序實現多工優點:穩定性高;提公升程式執行效率
image.png
from multiprocessing import pool # 匯入程序池模組
import os # 匯入系統模組
import time #匯入時間模組
import random
def to_work(num):
# 列印程序號
print("----開始執行任務%d,程序的pid為%d,父程序的pid為%d----"%(num, os.getpid(), os.getppid()))
# 模擬延時 random.random() 生成0-1之間的數
time.sleep(random.random())
print("第%d號程序完成任務%d第一階段"%(os.getpid(),num))
time.sleep(random.random())
print("第%d號程序完成任務%d第二階段"%(os.getpid(),num))
time.sleep(random.random())
print("第%d號程序完成任務%d第三階段"%(os.getpid(),num))
time.sleep(random.random())
print("----任務%d執行完畢----"%(num))
def main():
# 建立乙個最多開啟3程序的程序池
po = pool(3)
# 將5個任務新增到程序池
for i in range(1, 6):
# async非堵塞新增,to_work為引數名,i為傳遞的引數,單個引數一定要加逗號!一定要加逗號!一定要加逗號!
print("----開始----")
# 關閉程序池,不再接收新的任務,開始執行任務
po.close()
# 主程序等待所有子程序結束
po.join()
print("----結束----")
if __name__ == "__main__":
main()
image.png
from multiprocessing import process
import os
import time
import random
def to_work(num):
# 列印程序號
print("----開始執行第%d個子程序,程序的pid為%d,父程序的pid為%d----"%(num, os.getpid(), os.getppid()))
# 模擬延時 random.random() 生成0-1之間的數
time.sleep(random.random())
print("第%d號程序完成第一階段任務"%(os.getpid()))
time.sleep(random.random())
print("第%d號程序完成任第二階段任務"%(os.getpid()))
time.sleep(random.random())
print("第%d號程序完成第三階段任務"%(os.getpid()))
time.sleep(random.random())
print("----第%d個子程序執行完畢----"%(num))
def main():
# 建立子程序
son_p1 = process(target=to_work, args=)
son_p2 = process(target=to_work, args=)
print("----開始----")
# 開啟子程序
son_p1.start()
son_p2.start()
# 等待子程序結束
son_p1.join()
son_p2.join()
print("----結束----")
if __name__ == "__main__":
main()
image.png
import os
import time
import random
def work_fork(result):
if result == 0:
print("子程序%d開始執行,父程序pid為%d"%(os.getpid(),os.getppid()))
time.sleep(random.random())
print("子程序任務1")
time.sleep(random.random())
print("子程序任務2")
time.sleep(random.random())
print("子程序任務3")
time.sleep(random.random()*2)
print("子程序任務4")
time.sleep(random.random())
print("子程序函式執行完畢")
else:
print("父程序開始執行,程序pid為%d,祖先程序pid為%d"%(os.getpid(),os.getppid()))
time.sleep(random.random())
print("父程序任務1")
time.sleep(random.random())
print("父程序任務2")
time.sleep(random.random()*2)
print("父程序任務3")
time.sleep(random.random())
print("父程序任務4")
time.sleep(random.random())
print("父程序函式執行完畢")
def main():
result = os.fork()
work_fork(result)
print("主程序pid為%d"%(os.getpid()))
if __name__ == "__main__":
main()
import os
while true:
os.fork()
Python 多工之協程(3)實現多工
學習理解迭代器和生成器之後,開始使用協程來實現多工 當乙個函式中包含yield關鍵字,那麼這個函式就不再是乙個普通的函式,它的返回值是乙個生成器物件。我們可以使用next 或send 函式來啟動喚醒生成器物件,當程式第一次執行到yield時,程式暫停執行,並返回yield後邊跟的變數,當再次喚醒時,...
python多工與簡單程序
例如英特爾公司的intel,i3,i5,i7,i9當時是i9最好,如果要細分,這裡大概說一下,比如intel core i5 6200u cpu 2.30ghz中的2.30ghz代表一秒的計算次數,運算速度,越高越好。在作業系統中不執行的程式被稱作為程式,但是當他被作業系統載入到記憶體中,執行起來,...
python3協程數量限制 多工 3 協程
環境 python3.6 非同步io 我們知道,cpu 速度遠遠快於磁碟 網路等 io。在 io 程式設計中,假如乙個 io 操作阻塞了當前執行緒,會導致其他 無法執行,所以我們使用多執行緒或者多程序來併發執行 針對這個問題,我們需要另一種解決方法 非同步 io。非同步 io,即當 需要執行乙個耗時...