Python3簡單實現多工 多程序篇

2021-09-20 05:44:22 字數 3213 閱讀 8401

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,即當 需要執行乙個耗時...