基於python多程序的兩個練習

2021-10-01 07:30:53 字數 3746 閱讀 2430

練習1: 求100000以內質數之和

分別使用4個程序和10個程序做這件事,並且分別

統計執行時間,進行對比

import time

from multiprocessing import process

def timeis

(f):

(*args,

**kwargs)

: start_time = time.

time()

res =f(

*args,

**kwargs)

end_time = time.

time()

print

("%s執行時間%.6f"

%(f.__name__,end_time-start_time)

)return res

# 判斷乙個數是否為質數

def isprime

(n):

if n <=1:

return false

for i in range(2

,n):

if n % i ==0:

return false

return true

# 設定單程序

@timeis

def no_multi_process()

: prime =

for i in range(1

,100001):

ifisprime

(i):

prime.

(i)sum

(prime)

class prime

(process)

: def __init__

(self,prime,begin,end)

:super()

.__init__()

self.prime = prime # 裝質數的列表

self.begin = begin # 開始數值

self.end = end # 結束數值

def run

(self)

:for i in range

(self.begin,self.end):if

isprime

(i):

self.prime.

(i)sum

(self.prime)

# 設定4個程序

@timeis

def use_4_process()

: prime =

jobs =

for i in range(1

,100001

,25000):

p =prime

(prime,i,i+

25000

) jobs.

(p) p.

start()

[i.join()

for i in jobs]

# 設定10個程序

@timeis

def use_10_process()

: prime =

jobs =

for i in range(1

,100001

,10000):

p =prime

(prime,i,i+

10000

) jobs.

(p) p.

start()

[i.join()

for i in jobs]

if __name__ ==

'__main__'

:# no_multi_process執行時間26.246834

# no_multi_process()

# use_4_process執行時間14.909750

# use_4_process()

# use_10_process執行時間13.656211

use_10_process

()

至少同時拷貝4個檔案,並且僅能建立4個程序

拷貝過程中實時列印拷貝的百分比

from multiprocessing import pool,queue

import os

q =queue

() # 訊息佇列

# 拷貝乙個檔案,作為程序池事件

# 拷貝啥,從哪拷,拷到哪?

def copy_file

(file,old_dir,new_dir)

: fr =

open

(old_dir+

'/'+file,

'rb'

) fw =

open

(new_dir+

'/'+file,

'wb'

)while true:

data = fr.

read

(1024*10

)if not data:

break

n = fw.

write

(data)

q.put(n) # 位元組數傳入訊息佇列

fr.close()

fw.close()

def main()

:"""

建立程序池,呼叫拷貝檔案的函式作為事件

"""base_path =

"/home/tarena/" #基準目錄

dir =

input

("dir:"

) #要備份的目錄

old_dir = base_path + dir # 要備份目錄路徑

new_dir = old_dir+

'-備份' # 拷到這

os.mkdir

(new_dir)

file_list = os.

listdir

(old_dir) #拷這些

# 獲取目錄的總大小

total_size =

0for i in file_list:

total_size +

= os.path.

getsize

(old_dir+

'/'+i)

# 建立程序池

pool =

pool(4

)for file in file_list:

pool.

(copy_file,

args=

(file,old_dir,new_dir)

) pool.

close()

print

("目錄大小:%.2fm"

%(total_size/

1024

/1024))

copy_size =

0 # 已經拷貝了的大小

while copy_size < total_size:

copy_size +

= q.

get(

)print

("拷貝了%.1f%%"

%(copy_size/total_size*

100)

) pool.

join()

if __name__ ==

'__main__'

:main

()

注:設定多個程序並不一定會成倍的提高執行效率,需要看主機配置幾核的處理器

Python兩個程序溝通問題

在父程序中建立兩個子程序,乙個往queue寫資料,乙個從queue讀資料,用同乙個訊息佇列 frommultiprocessingimportqueue,process importtime,random defwrite q forvaluein a b c d print write put s...

python多程序的坑 Python多程序相關的坑

python的multiprocessing模組實現了多程序功能,但官方文件上只有一些比較簡單的用法,主要是使用函式作為process的target,而如何在class中使用多程序並沒有多講解。google出兩篇比較詳細的文章,建議從它們入門 下面記錄一下自己這週在python多程序上碰到的坑 建立...

Python多程序1 乙個多程序例項

學習 分類目錄 多程序 多程序與多執行緒類似,無論是在理論還是操作上,我在這裡就多執行緒寫了一點東西。多程序與多執行緒最大的區別是,多程序是真正意義上的 物理層面上的並行執行,每個程序會被分配到足夠的 在實際有那麼多的前提下 資源單獨進行運算。而多執行緒則是多個程序間共享資源,通過分時獲得資源的一種...