脚本B减慢了脚本A的速度

时间:2018-02-05 10:05:39

标签: python time process raspberry-pi

我在Raspberry Pi上使用Python 2.7。

我运行一个脚本A,这是一个for循环,每隔30秒拍照。通常,对于每次迭代,捕获场景并保存它需要大约5秒钟,然后它会休眠(大约25秒)直到下一次迭代。

经过一段时间后,我运行了一个脚本B,它根据脚本A拍摄的图像来计算内容。所以这两个脚本同时运行。我没有使用子进程或任何东西,只是单独执行两个脚本。

我的问题是:当脚本B运行时,脚本A会减慢很多,所以有时前5秒变成25-30秒,然后一次迭代可以持续40秒或更长时间!

你知道为什么在脚本A中不遵守持续时间,以及我如何解决这个问题?

谢谢:)!

2 个答案:

答案 0 :(得分:0)

我相信如果你在Linux环境中,你可以使用nice命令来平衡cpu的使用。例如:

nice --12 script.py 

上面的数字表示对cpu很好的数量。它在-20到+19之间。

答案 1 :(得分:0)

  1. 如果“脚本B”的计算量几乎总是相同,您可以在几秒钟内从睡眠计时器中减去此时间。
  2. 2.您还可以在几秒钟内完成脚本的运行时间,您将在执行结束时输出。问题是python programm会在继续之前等待完成的脚本。

    import subprocess
    import time
    counter = 0
    script_a_runtime = 0
    script_b_runtime = 0
    
    while True:
        counter += 1
        script_a = 0
        script_b = 0
        script_a_runtime = int(subprocess.check_output(['scripta']))
        if counter >=5:
            counter = 0
            script_b_runtime = int(subprocess.check_output(['scriptb']))
        sleeptime = 30 - script_a_runtime - script_b_runtime
        if sleeptime:
            time.sleep(sleeptime)
    

    3.Timers

    import datetime
    import time
    import subprocess
    script_a_runtime = 0
    script_b_runtime = 0
    
    while True:
        counter += 1
        start_a = datetime.datetime.now()
        subprocess.check_output(['script_a'])
        finish_a = datetime.datetime.now()
        script_a_runtime = finish_a - start_a
        if counter >= 5:
            counter = 0
            start_b = datetime.datetime.now()
            subprocess.check_output(['script_b'])
            finish_b = datetime.datetime.now()
            script_b_runtime = finish_b - start_b
            sleeptime = 30 - script_a_runtime.seconds - script_b_runtime.seconds
        if sleeptime:
            time.sleep(sleeptime)
    

    我认为运行那些并排依赖的脚本是个好主意。此外,如果在应该再次运行scriptA / B之前没有完成,则可能会出现问题。