国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

提升Python os.system調(diào)用Shell的執(zhí)行效率

這篇具有很好參考價值的文章主要介紹了提升Python os.system調(diào)用Shell的執(zhí)行效率。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

?

最近做了一個SDN流表的實驗,在這個實驗中,需要批量刪除大量的流表項,使用了shell腳本。然而,我的流表數(shù)據(jù)存放在python字典中,我一開始是考慮每次讀取一個字典并構造一條指令調(diào)用os.system(),然后發(fā)現(xiàn)這種方法效率非常糟糕。

我考慮問題可能出現(xiàn)在os.system()的調(diào)用上,可能它是一種非常費時間的調(diào)用(相比于直接用shell處理數(shù)據(jù))。

但是麻煩的是,這個SDN項目控制器基于python,我沒法直接用shell寫控制器程序。

所以然后想了一些辦法提升它的執(zhí)行效率,即本文內(nèi)容。

本文適用于有大量python數(shù)據(jù)需要shell進一步處理的環(huán)境。

?

實驗和方法

?

我寫了兩個程序,用來測試每次循環(huán)調(diào)用os.system的執(zhí)行時間以及直接使用shell的執(zhí)行時間,如下所示。

Python:

import os
import time

start1=time.clock()
os.system('./shell_test.sh')
end1=time.clock()

start2=time.clock()
for i in range(0,1001):
	command = 'echo ' + str(i)
	os.system(command)
end2=time.clock()

start3=time.clock()
for i in range(0,1001):
	command = 'echo ' + str(i) + ' &'
	os.system(command)
end3=time.clock()

print 'For Cycle in Shell: ' + str(end1-start1) + 's'
print 'For Cycle in Python Command: ' + str(end2-start2) + 's'
print 'For Cycle in Python Command with &: ' + str(end3-start3) + 's'

Shell:

#! /bin/bash

i=0

start=$(date +%s%N)
start_ms=${start:0:16}

while [ $i -le 1000 ]
do
	echo "$i"
	let i=i+1
done

end=$(date +%s%N)
end_ms=${end:0:16}
echo "cost time is: "
echo "scale=6; ($end_ms - $start_ms)/1000000" | bc

?

總結一下:

我考慮了循環(huán)1000次并打印的場景,其中,python程序里我統(tǒng)計了三個時間,分別是:

1、調(diào)用一次shell,shell循環(huán)1000次;

2、python生成shell指令,調(diào)用1000次os.system()執(zhí)行;

3、python生成shell執(zhí)行,調(diào)用1000次os.system(),同時這些os.system()并行執(zhí)行(最后有一個&)。

?

執(zhí)行結果:

For Cycle in Shell: 0.000317s(cost time is: .018886)
For Cycle in Python Command: 0.167936s
For Cycle in Python Command with &: 0.171174s

?

結論

?

我們發(fā)現(xiàn),shell中執(zhí)行1000次循環(huán),其程序的本身運行時間僅需要0.018秒;

然而,如果使用python生成每一條指令并執(zhí)行os.system(),其時間需要0.16秒,大約相差10倍。

如果僅考慮python中調(diào)用os.system()的時間,那么僅調(diào)用一次os.system()的時間是循環(huán)生成指令并調(diào)用的約600分之一(0.0003 VS 0.1679)

在本實驗中,我們使用了os.system()的阻塞方法,若使用命令行末尾的 & 或者其他非阻塞方法,此時在理論上,我們僅需考慮python調(diào)用的時間。因此,在理想的理論情況上來看,在shell中直接執(zhí)行循環(huán)的效率能夠比在python中每次生成命令并調(diào)用os.system()的效率提升10到數(shù)百倍。

而利用 & 標識進行并行處理的情況和非并行的情況差不多(0.167 VS 0.171),其原因分析是:在這兩種情況下,都調(diào)用了1000次os.system(),而這可能是一種費時的方法,與簡單的執(zhí)行指令的時間開銷并不在一個數(shù)量級上。

?

綜上所述,若python需要循環(huán)調(diào)用shell,考慮到程序運行的效率,最關鍵的問題在于減少os.system類指令的調(diào)用次數(shù)。

解決的思路是:將循環(huán)寫入shell腳本,減少python調(diào)用shell的次數(shù)。如果shell腳本需要額外python程序中生成的參數(shù)作為輸入,將其作為環(huán)境變量,傳給shell腳本。

?

如何實現(xiàn)python將數(shù)組傳入shell,并在shell中循環(huán)執(zhí)行請參考我的另一篇博客:

https://blog.csdn.net/yyd19981117/article/details/117337487?spm=1001.2014.3001.5501文章來源地址http://www.zghlxwxcb.cn/news/detail-420722.html

到了這里,關于提升Python os.system調(diào)用Shell的執(zhí)行效率的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Python中os.system()、subprocess.run()、call()、check_output()的用法

    os.system() 是對 C 語言中 system() 系統(tǒng)函數(shù)的封裝,允許執(zhí)行一條命令,并返回退出碼(exit code),命令輸出的內(nèi)容會直接打印到屏幕上,無法直接獲取。 示例: Python 3.5 開始推薦使用這個方法執(zhí)行命令,其原型如下: 其中: args: 可以是一個字符串(當 shell=True 時),也可以

    2024年02月12日
    瀏覽(19)
  • Android System Property講解前言

    Android System Property講解前言

    我們在開發(fā)過程中經(jīng)常會使用到系統(tǒng)屬性,例如獲取系統(tǒng)軟件版本,獲取設備名名稱,boardid等;有時也需要內(nèi)置自己的屬性,系統(tǒng)屬性簡單來說是用來存儲系統(tǒng)中某些鍵值對數(shù)據(jù),具有全局性、存取靈活方便的特點。 setprop 可以給屬性設置int,bool,string等基本類型 在java代碼中

    2024年02月07日
    瀏覽(24)
  • 13.108.Spark 優(yōu)化、Spark優(yōu)化與hive的區(qū)別、SparkSQL啟動參數(shù)調(diào)優(yōu)、四川任務優(yōu)化實踐:執(zhí)行效率提升50%以上

    13.108.Spark 優(yōu)化、Spark優(yōu)化與hive的區(qū)別、SparkSQL啟動參數(shù)調(diào)優(yōu)、四川任務優(yōu)化實踐:執(zhí)行效率提升50%以上

    13.108.Spark 優(yōu)化 1.1.25.Spark優(yōu)化與hive的區(qū)別 1.1.26.SparkSQL啟動參數(shù)調(diào)優(yōu) 1.1.27.四川任務優(yōu)化實踐:執(zhí)行效率提升50%以上 1.1.25.Spark優(yōu)化與hive的區(qū)別 先理解spark與mapreduce的本質區(qū)別,算子之間(map和reduce之間多了依賴關系判斷,即寬依賴和窄依賴。) 優(yōu)化的思路和hive基本一致,比較

    2024年02月10日
    瀏覽(95)
  • 運維Shell腳本小試牛刀(七):在函數(shù)文腳本件中調(diào)用另外一個腳本文件中函數(shù)|函數(shù)遞歸調(diào)用|函數(shù)后臺執(zhí)行

    運維Shell腳本小試牛刀(七):在函數(shù)文腳本件中調(diào)用另外一個腳本文件中函數(shù)|函數(shù)遞歸調(diào)用|函數(shù)后臺執(zhí)行

    運維Shell腳本小試牛刀(一) 運維Shell腳本小試牛刀(二) 運維Shell腳本小試牛刀(三)::$(cd $(dirname $0); pwd)命令詳解 運維Shell腳本小試牛刀(四): 多層嵌套if...elif...elif....else fi_蝸牛楊哥的博客-CSDN博客 Cenos7安裝小火車程序動畫 運維Shell腳本小試牛刀(五):until循環(huán) 運維Shell腳本小試牛刀

    2024年02月09日
    瀏覽(27)
  • Java進程ProcessBuilder類的介紹及使用,ProcessBuilder調(diào)用外部程序執(zhí)行shell命令Linux命令

    Java進程ProcessBuilder類的介紹及使用,ProcessBuilder調(diào)用外部程序執(zhí)行shell命令Linux命令

    目錄 ProcessBuilder類的介紹及使用 【前言】 【正文】 --構造方法-- --常用方法-- --使用技巧-- --調(diào)用本地Shell命令,實例-- 【總結】 【注意】 ????????在做一個項目的時候需要用到運行時動態(tài)執(zhí)行JAVA命令,一開始的思路是運行時生成bat腳本,然后通過Runtime類的exec方法之行

    2024年02月09日
    瀏覽(27)
  • Python中使用隧道爬蟲ip提升數(shù)據(jù)爬取效率

    Python中使用隧道爬蟲ip提升數(shù)據(jù)爬取效率

    作為專業(yè)爬蟲程序員,我們經(jīng)常面臨需要爬取大量數(shù)據(jù)的任務。然而,有些網(wǎng)站可能會對頻繁的請求進行限制,這就需要我們使用隧道爬蟲ip來繞過這些限制,提高數(shù)據(jù)爬取效率。本文將分享如何在Python中使用隧道爬蟲ip實現(xiàn)API請求與響應的技巧。并進行詳細的解析和實際代碼

    2024年02月12日
    瀏覽(29)
  • Python自動化辦公:提升效率,釋放潛力(借助AI實現(xiàn))

    Python自動化辦公:提升效率,釋放潛力(借助AI實現(xiàn))

    歡迎關注博主 Mindtechnist 或加入【智能科技社區(qū)】一起學習和分享Linux、C、C++、Python、Matlab,機器人運動控制、多機器人協(xié)作,智能優(yōu)化算法,濾波估計、多傳感器信息融合,機器學習,人工智能等相關領域的知識和技術。搜索關注公粽號《機器和智能》即可領取技術大禮包

    2024年02月15日
    瀏覽(27)
  • < Python全景系列-7 > 提升Python編程效率:模塊與包全面解讀

    歡迎來到我們的系列博客《Python全景系列》!在這個系列中,我們將帶領你從Python的基礎知識開始,一步步深入到高級話題,幫助你掌握這門強大而靈活的編程語法。無論你是編程新手,還是有一定基礎的開發(fā)者,這個系列都將提供你需要的知識和技能。 Python全景系列的第七

    2024年02月06日
    瀏覽(20)
  • Python調(diào)用Shell命令 (python,shell 混合編程)

    Python調(diào)用Shell命令 (python,shell 混合編程)

    Python經(jīng)常被稱作“膠水語言”,因為它能夠輕易地操作其他程序,輕易地包裝使用其他語言編寫的庫,也當然可以用Python調(diào)用Shell命令。 用Python調(diào)用Shell命令有如下幾種方式: os .system( \\\"The command you want\\\" ). os .system( \\\"lscpu\\\" ). os .system( \\\"ls -al\\\" ). 這個調(diào)用相當直接,且是同步進行的

    2024年02月16日
    瀏覽(23)
  • Python調(diào)用adb shell

    在Android開發(fā)中,ADB(Android Debug Bridge)是一個非常重要的工具。它可以讓我們通過命令行或者其他的客戶端與安裝了ADB驅動的Android設備進行通信,并進行一些調(diào)試操作。 Python作為一門靈活強大的語言,很自然就成為了用來控制ADB的工具之一。本文將介紹如何使用Python調(diào)用A

    2024年02月07日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包