所以我是一个没有经验的Python程序员,我收集的东西可能是一个相当复杂的需求。我是一名认知科学家,我需要精确的刺激显示和按钮按下检测。有人告诉我,最好的方法是使用实时操作,但我不知道如何去做。理想情况下,对于每一次试验,程序都会实时运行,然后一旦试验结束,操作系统就可以回到不那么细致的状态。将会有大约56次试验。有没有办法从我的python脚本中对此进行编码?
(话又说回来,我需要知道的是刺激实际上是什么时候显示的。实时方法将确保刺激在我想要的时候显示,这是一种自上而下的方法。另一方面,如果更容易知道记录计算机何时真正有机会显示它,我可以采取一种更自下而上的方法。)
发布于 2014-07-18 15:51:16
当人们谈论实时计算时,他们的意思是从中断(通常由计时器触发)到处理正在运行的中断的应用程序代码的延迟既小又可预测。这意味着控制过程可以以非常精确的时间间隔重复运行,或者,与您的情况一样,可以非常精确地对外部事件进行计时。延迟的变化通常被称为“抖动”- 1ms最大抖动意味着重复到达的中断将具有最多1ms变化的响应延迟。
“小”和“可预测”都是相对的术语,当人们谈论实时性能时,他们可能是指1μ的最大抖动(例如,建造电力传输逆变器的人关心这种性能),或者他们可能意味着几毫秒的最大抖动。这完全取决于应用程序的需求。
无论如何,Python不太可能是适合这项工作的工具,原因如下:
malloc
或C++的new
),因为它们花费的时间是不可预测的。Python巧妙地对你隐藏了这一点,使得控制延迟变得非常困难。同样,使用大量现成的库只会使情况变得更糟。mlockall
,但任何新的分配都会打乱事情)。不过,我有一个更基本的问题。你不会说你的按钮是物理按钮还是屏幕上的按钮。如果它在屏幕上,操作系统将在物理鼠标按键和到达Python应用程序的事件之间施加不可预知的延迟量。你将如何解释这一点?如果没有更准确的测量方法,你怎么知道它是否存在呢?
发布于 2011-08-16 23:13:44
按照purist的标准,Python并不是一种实时语言--它有太多的库和函数,不可能是最快的。但是,如果你已经在使用操作系统,而不是嵌入式系统,你已经失去了很多真正的实时能力。(当我听到“实时”时,我想到的是VHDL代码流经FPGA线路所花费的时间。其他人用它来表示“我按下一个按钮,它就会做一些事情,从我缓慢的人类角度来看,是瞬间的”。我将假设您使用的是实时的后一种解释。)
关于刺激显示和按钮按下检测,我假设你的意思是你有一些东西(例如),比如你向一个人展示了一张图像,让他们点击一个按钮来识别图像或确认他们已经看到了它--可能是为了测试反应速度。除非您担心精确到毫秒(与人类反应的时间相比,这应该是微不足道的),否则您可以使用python进行这样的测试。要在图形用户界面上工作,请查看Tkinter:http://www.pythonware.com/library/tkinter/introduction/。要研究刺激和按下按钮之间的时间,请查看时间文档:http://docs.python.org/library/time.html
祝好运!
发布于 2011-08-17 00:56:09
因为您正在尝试获得毫秒精度的时间延迟的科学测量,所以我不建议在通用计算机上执行任何受时间切片影响的过程。无论是用C实现的,还是用Java实现的,还是用Python实现的,如果它以分时模式运行,那么结果如何才能被验证呢?您可能需要证明CPU在测量过程中从未中断过进程,从而扭曲了结果。
听起来你可能需要为此目的构建一个专用设备,带有一个时钟电路,它以已知的频率滴答作响,并可以测量刺激和反应之间发生的离散滴答次数。然后,该设备可以由没有这种时序约束的软件控制。也许你应该把这个问题发布到Electrical Engineering交易所。
如果没有专用设备,你将不得不开发真正的实时软件,就现代操作系统而言,它在内核中运行,不受任务切换的影响。要做到这一点并不容易,而且需要付出大量的努力才能做到这一点。我猜,比你花更多的时间来构建一个专用的软件可控设备来实现你的目的。
https://stackoverflow.com/questions/7079864
复制相似问题