从线程更新python全局变量

时间:2015-02-12 15:11:47

标签: python python-2.7

我有一个偶尔需要重新加载的配置文件。 重新加载在一个在线程中运行的类的方法内调用。

我尝试使用globals()执行此操作,但尽管print globals()表明他们已更新程序但看不到更改。

我尝试在使用前添加global variableName,但仍然没有。

之后我考虑使用__main__因为我知道它有效,但我的问题是当我的变量名是从文件中读取的字符串时,我无法设置__main__变量。

这是我的配置解析器:

def parse_config(path):
  # grab config.ini
  ini_file     = open(root_path + path)
  ini_contents = ini_file.read().replace('\r\n', '\n')
  ini_file.close()
  ini_list     = filter(None, ini_contents.split("\n"))
  ini_settings = [x for x in ini_list if not x.startswith('#')]

  # loop config file lines and set variables
  for line in ini_settings:
    splits = line.split('=', 1)
    name   = splits[0].strip()
    value  = splits[1].strip()

    value = value.replace('THIS/', root_path)
    if value[0] == ':':
      value = value[1:].split(',')
    elif str(value).lower() == 'true':
      value = True
    elif str(value).lower() == 'false':
      value = False

    globals().update({name:value})

示例ini文件

# Path to folder where error logs get written
error_log_path    = THIS/logs/

# Print in console (for debugging only)
logg_print        = True

# Log to file
logg_write        = True
logg_file_path    = THIS/logs/

主要应用示例

class NotifyHandler():

  def __init__(self):
    m = threading.Thread(target=self.process_send)
    m.setDaemon(True)
    m.start()

  def process_send(self):
    while True:
      parse_config('config.ini')
      print logg_print
      time.sleep(10)

NotifyHandler()
while True:
  time.sleep(10)

0 个答案:

没有答案