我正在运行测试,但我想同时运行两个函数。我有一个摄像头,我告诉它通过suds移动,然后我通过SSH登录到摄像头,检查摄像头设置的速度。当我检查速度时,相机已经停止,所以没有速度可用。有没有办法让这些功能同时运行来测试相机的速度。示例代码如下:
class VerifyPan(TestAbsoluteMove):
def runTest(self):
self.dest.PanTilt._x=350
# Runs soap move command
threading.Thread(target = SudsMove).start()
self.command = './ptzpanposition -c 0 -u degx10'
# Logs into camera and checks speed
TestAbsoluteMove.Ssh(self)
# Position of the camera verified through Ssh (No decimal point added to the Ssh value)
self.assertEqual(self.Value, '3500')
我现在已经尝试了下面提到的线程模块。线程不与函数TestAbsoluteMove.Ssh()同步运行。我还需要其他代码来实现这个功能吗。
我已经研究了将参数放入thread语句中,该语句在Ssh()函数运行时声明线程。有人知道在这个声明中要输入什么吗?
对不起,如果我没有正确解释。“SudsMove”函数移动相机,“Ssh”函数登录到相机并检查相机当前的移动速度。问题是,当“Ssh”函数登录到相机时,它已经停止。我需要两个功能并行运行,这样我可以检查相机的速度,而它仍然在移动。
谢谢
如果您想使用公共Python实现(CPython),您当然可以使用multiprocessing模块,该模块does wonders(您可以将不可pickle的参数传递给子进程,终止任务,…),提供类似于线程的接口,并且不受全局解释器锁的影响。
缺点是子进程是派生的,这比创建线程需要更多的时间;只有当您有许多短任务时,这才应该是一个问题。此外,由于数据是在进程之间(通过序列化)传递的,因此大数据的传递都需要很长时间,并且最终会占用很大的内存(因为它在每个进程之间都是重复的)。在每个任务花费“很长”时间并且每个任务进出的数据不太大的情况下,multiprocessing模块应该很棒。
只能有一个线程同时运行。这已经得到了广泛的回答。一个解决方案是使用两个独立的过程。上面的答案提供了一些提示。
导入
threading
模块并运行SudsMove()
,如下所示:它将创建并启动一个执行移动的后台线程。
编辑问题的答案:
据我所知,
TestAbsoluteMove.Ssh(self)
只轮询一次速度并将结果存储到self.Value
?!你用self.assertEqual(self.Value, '3500')
测试预期的末端倾斜/旋转/位置?!如果这是正确的,你应该等待相机开始移动。您可能可以在特定的时间间隔内轮询速度:
移动速度将是
measuredSpeedsList
(即max(measuredSpeedsList)
)中的最大值。希望这有道理。。。相关问题 更多 >
编程相关推荐