首页 > 解决方案 > 从 bash 脚本运行多个 Python 脚本时将 Python 脚本加载到内存中

问题描述

我有一个看起来像这样的 bash 脚本:

#!/bin/bash
{
    var1='stuff'
    var2='more stuff'

    cd path/to/package &&
    python setup.py install &&

    printf "Ok, we're gonna run this bad boy" &&
    (
        printf "Training" &&
        python -u script1.py "${var1}" "${var2}" &&
        printf "Testing" &&
        python -u script2.py "${var1}"
    ) 2>&1 | tee log.txt

    exit
}

bash 脚本运行script1.py,完成后运行script2.py

设置:

script1.py通过其他 Python 脚本中定义的一些方法读取一些数据,然后创建其中定义的类的实例script3.py并调用该类中的train()方法。此train()方法运行数小时。当这个train()方法返回时,script1.py也返回。

script2.py通过其他 Python 脚本中定义的一些方法读取一些数据,然后创建其中定义的类的实例script3.py并调用该类中的test()方法。此test()方法运行数小时。当这个test()方法返回时,script2.py也返回。

script3.py执行数据读取的 Python 脚本是 Python 包的一部分。

script3.py看起来像这样:

class MyClass():

    some_var = '' # Enum value

    def __init__(self):
        print('Initialized this bad boy')

    def train(self, param1, param2):
        # some code goes here, uses class variable some_var

    def test(self, param1, param2):
        # some code goes here, uses class variable some_var

我的流程如下:

  1. script3.py我在更改类变量的地方编辑源代码some_var
  2. 我运行 bash 脚本。(注意脚本首先运行python setup.py install
  3. script3.py我在更改相同类变量的地方编辑源代码。
  4. 我运行 bash 脚本。(注意脚本首先运行python setup.py install,还要注意这是在方法返回之前启动的train()
  5. 重复几次。

我期望发生的事情:

我希望当我运行 bash 脚本时,将 bash 脚本和 Python 脚本加载到内存中,然后根据需要执行。具体来说:

实际发生的情况:

假设我在几分钟内运行了 3 次 bash 脚本。由于train()方法需要几个小时才能执行,当执行到test()方法时,类变量some_var更改为源代码的最后一次编辑,所以所有3次运行都使用相同的值some_var,具体是最后一次编辑时设置的值, 在第三次运行 bash 脚本之前。

快速修复:

一个快速的解决方法是编辑script3.py如下:

class MyClass():

    some_var = 'value1' # Enum value

    def __init__(self):
        print('Initialized this bad boy')

    def train(self, param1, param2):
        self.some_var = 'value1'
        # some code goes here, uses class variable some_var

    def test(self, param1, param2):
        self.some_var = 'value1'
        # some code goes here, uses class variable some_var

然而,这将是糟糕的代码质量并且也不切实际,因为现在我必须some_var在每次运行 bash 脚本之前更改 3 个位置。转念一想,这行不通。它的行为相同,始终使用上次编辑的值。

问题:

实现这一目标的更好方法是什么?
我认为必须有一种方法可以在 bash 脚本的整个执行过程中将 Python 脚本加载到内存中。

限制(由于这是一个更大项目的一部分):

标签: pythonbash

解决方案


推荐阅读