当前位置: 首页 > 知识库问答 >
问题:

脚本B使脚本A变慢

胡和煦
2023-03-14

我在树莓派上使用Python 2.7。

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

过了一段时间,我运行了一个脚本B,它根据脚本a拍摄的图像计算内容。因此,这两个脚本同时运行。我没有使用子流程或任何东西,只是分别执行这两个脚本。

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

您知道为什么脚本A中不尊重持续时间,以及我如何解决这个问题吗?

谢谢:)!

共有2个答案

曹普松
2023-03-14
  1. 如果“脚本B”的计算量几乎总是相同的,则可以从睡眠计时器中减去此时间(以秒为单位)

2.您还可以在脚本执行结束时以秒为单位获取运行时。问题是python程序将在继续之前等待完成的脚本。

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.定时器

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)

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

林英武
2023-03-14

我相信如果你在一个Linux的环境中,你可以使用尼斯命令来平衡cpuusage.for例子:

nice --12 script.py 

上面的数字表示对cpu的友好程度。它在-20和19之间。

 类似资料:
  • 脚本概述 Unity 采用了标准的 Mono 运行时来提供脚本功能,并扩展了自主的实践和技术,来支持脚本访问引擎。本节介绍如何通过脚本控制在 Unity 编辑器中创建的对象,并详细介绍 Unity 游戏功能和 Mono 运行时之间的关系。 译注:Mono 是 ECMA 通用语言基础架构(ECMA Common Language Infrastructure,CLI) 的实现。关于 Mono 是如何

  • 拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?

  • 当调用一个脚本时,MATLAB会简单地执行文件中找到的命令。脚本可以运行工作空间中存在的数据,或者脚本创建新数据来运行。虽然脚本不能返回输出变量,但是所有创建的变量将保留在工作空间中,供给后面的计算使用。另外,脚本能提供图形输出,就像使用plot函数一样。 例如,创建一个叫magicrank.m的文件,它包含有MATLAB的命令。 % Investigate the rank of magic s

  • IServer.ScriptLoad(Async)、 IServer.ScriptExists(Async)、IServer.ScriptFlush(Async)、 IDatabase.ScriptEvaluate 和 IDatabaseAsync.ScriptEvaluateAsync 这些方法为基本的 Lua脚本 提供了支持。 这些方法暴露了向Redis提交和执行Lua脚本所需的基本命令。 通

  • 脚本 脚本是所有游戏的基本要素。即使是最简单的游戏也会用到脚本,例如,在游戏中响应玩家的输入,并分派符合预期的事件。除此之外,脚本可以用来创建图形效果、控制对象的物理行为,甚至是为游戏中人物实现一套自定义 AI 系统。 编写脚本是一门技能,需要投入一定的时间和精力去学习。但本节的目的不是教你如何从头开始编写脚本,而是解释 Unity 脚本的主要概念。 相关教程:脚本 有关故障排除、技巧和窍门的内容

  • 简介 每个脚本都是纯文本文件, 其中包含了可由程序 (AutoHotkey.exe) 执行的文本行. 脚本中还可以包含 热键 和 热字串 或者甚至完全由它们组成. 不过, 在不包含热键和热字串时, 脚本会在启动后从上往下按顺序执行其中的命令. 程序会把脚本逐行加载到内存中, 每行最多可以包含 16,383 个字符. 在加载过程中, 脚本会被 优化 和检查. 将列出所有的语法错误, 更正它们后脚本才