gpt4 book ai didi

python - 通过Python实时操作

转载 作者:太空狗 更新时间:2023-10-29 17:25:39 27 4
gpt4 key购买 nike

所以我是一个没有经验的 Python 编码员,我收集到的可能是一个相当复杂的需求。我是一名认知科学家,我需要精确的刺激显示和按钮按下检测。有人告诉我最好的方法是使用实​​时操作,但不知道如何去做。理想情况下,每次试用时,程序都会实时运行,然后一旦试用结束,操作系统就会恢复到不那么细致的状态。将进行大约 56 次试验。可能有一种方法可以从我的 python 脚本对此进行编码吗?

(话又说回来,我只需要知道什么时候实际显示刺激。实时方法可以确保刺激在我想要的时候显示,这是一种自上而下的方法。另一方面,如果只知道记录计算机实际有机会显示它的时间会更容易,我可以采取更自下而上的方法。)

最佳答案

当人们谈论实时计算时,他们的意思是从中断(通常由计时器触发)到处理正在运行的中断的应用程序代码之间的延迟既小又可预测。这意味着可以以非常精确的时间间隔重复运行控制过程,或者像您的情况一样,可以非常精确地对外部事件进行计时。延迟的变化通常称为“抖动”- 1ms 的最大抖动意味着重复到达的中断将具有最多 1ms 变化的响应延迟。

“小”和“可预测”都是相对术语,当人们谈论实时性能时,他们可能指的是 1μs 的最大抖动(例如,为电力传输构建逆变器的人关心这种性能)或者他们可能指的是几毫秒的最大抖动。这完全取决于应用程序的要求。

无论如何,Python 不太可能是这项工作的正确工具,原因如下:

  • Python 主要在桌面操作系统上运行。桌面操作系统对最大抖动施加了下限;在 Windows 的情况下,它是几秒钟。多秒事件不会经常发生,每隔一两天就会发生一次,如果你想测量的事情与一个事件同时发生,你会很不走运,但它迟早会发生;几百毫秒范围内的抖动更频繁,可能每小时发生一次,而几十毫秒范围内的抖动则相当频繁。桌面 Linux 的数字可能相似,但您可以将不同的编译时选项和补丁集应用于 Linux 内核以改善这种情况 - Google PREEMPT_RT_FULL。
  • Python 的 stop-the-world 垃圾收集器使延迟变得不确定。当 Python 决定它需要运行垃圾收集器时,您的程序将停止直到它完成。您可以通过仔细的内存管理和仔细设置垃圾收集器参数来避免这种情况,但也可能不会,这取决于您使用的库。
  • Python 内存管理的其他特性使得确定性延迟变得困难。大多数实时系统避免堆分配(即 C 的 malloc 或 C++ 的 new),因为它们占用的时间量是不可预测的。 Python 巧妙地向您隐藏了这一点,因此很难控制延迟。同样,使用大量现成的优秀库只会让情况变得更糟。
  • 同样,实时进程必须将所有内存保存在物理 RAM 中,而不是调出进行交换。在 Python 中没有很好的方法来控制它,尤其是在 Windows 上运行(在 Linux 上你可能可以在某个地方调用 mlockall,但是任何新的分配都会扰乱事情)。

不过我有一个更基本的问题。您不会说您的按钮是物理按钮还是屏幕上的按钮。如果它在屏幕上,操作系统将在物理鼠标按钮按下和事件到达您的 Python 应用程序之间施加不可预测的延迟量。你将如何解释这一点?如果没有更准确的测量方法,您怎么知道它是否存在?

关于python - 通过Python实时操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com