目前測試有兩種方法:
config.ini
[server]
interval = 3
args_parser.py
import configparser
# 全域性變數
config_file = "config.ini"
def read_config(config_file_name):
config = configparser.configparser(interpolation=configparser.extendedinterpolation())
config.read(config_file_name)
return config
config = read_config(config_file)
test.py
import time
import os
from datetime import datetime
import args_parser
while 1:
reload(args_parser)
d = datetime.now()
config = args_parser.config
v = config['server']['interval']
print "%s :: %s" % (d, v)
time.sleep(1)
這種方法的問題是,每次迴圈都要reload一下,自然影響機器開銷不說,看著心裡也不爽。
因此考慮把reload單獨放到外面:
加入中間處理程式args_reloader.py。
import args_parser
from decorators import run_period, wrap_threading
@wrap_threading
@run_period(interval=10)
def reload_args():
print("reload args")
reload(args_parser)
reload_args()
# 用來對比
config = args_aprser.config
其中wrap_threading表示這個程式用單獨乙個執行緒跑,run_period表示每個一段時間這個程式跑一次。這兩個組合就是開啟乙個新執行緒,這個執行緒是每個一段時間跑一下程式。
test.py更改為:
import time
import os
from datetime import datetime
#from args_parser import config
import args_reloader
while 1:
d = datetime.now()
config = args_reloader.args_parser.config
v = config['server']['interval']
print "%s :: %s" % (d, v)
time.sleep(1)
其中config,必須這樣序列寫,因為reload其實更改了args_parser裡面的東西,所以這樣寫是有效的,寫成args_reloader.config指向的還是第一次讀取的config。
方法1不管怎麼看,都是很麻煩的方式,先不說寫法麻煩,而且強耦合。
所以自然有第二種寫法,本質在於python的乙個模組就是乙個單例模式。
import args_parser
from decorators import run_period, wrap_threading
import configparser
# 全域性變數
config_file = "config.ini"
config = none
@wrap_threading
@run_period(interval=10)
def read_config_dyn():
print("read config")
args_parser.config = read_config(config_file)
def read_config(config_file_name):
config = configparser.configparser(interpolation=configparser.extendedinterpolation())
config.read(config_file_name)
return config
test.py:
import time
import os
from datetime import datetime
import args_parser
from args_parser_updater import read_config_dyn
read_config_dyn()
while 1:
#reload(args_parser)
d = datetime.now()
config = args_parser.config
v = config['server']['interval']
print "%s :: %s" % (d, v)
time.sleep(1)
重點在於:
from args_parser_updater import read_config_dyn
read_config_dyn()
可以看出,這種寫法很簡單,同時也和模組松耦合,實際在開發中需要單獨加個中間模組來儲存更新的引數,程式的其他部分都從中間模組中讀取引數。
所以在寫程式的時候,模組級別的變數輸入,最好寫法是 import 模組,然後根據 模組.變數名的方式 來寫。
python 模組引用 python如何引用模組
模組實際上就是 以.py為結尾的檔案 注意點 自定義的模組盡量不要和系統模組重名 模組內部封裝了很多實用的功能,有時在模組外部呼叫就需要將其匯入,匯入模組簡單劃分,實際上就只有兩種 import from import 詳細一點劃分有五種 1,improt 模組名 呼叫 模組名.功能名 2,impo...
python 如何更新 Python列表如何更新值
序列是python中最基本的資料結構。序列中的每個元素都分配乙個數字 它的位置,或索引,第乙個索引是0,第二個索引是1,依此類推。python有6個序列的內建型別,但最常見的是列表和元組。序列都可以進行的操作包括索引,切片,加,乘,檢查成員。此外,python已經內建確定序列的長度以及確定最大和最小...
python 使用小技巧(動態更新)
1 找出含有特定字串的行res res res choice str.contains 2 找出第乙個字元是 9 的行res res res choice str 0 9 3 提高多層行索引的 dataframe 的搜尋效率col one two c u 9對於以上結構的兩層行索引 datafram...