Python 如何同时运行两个函数

Python 如何同时运行两个函数,python,testing,multithreading,function,synchronization,Python,Testing,Multithreading,Function,Synchronization,我正在运行测试,但我想同时运行两个函数。我有一个摄像头,我告诉它通过肥皂水移动,然后我通过SSH登录摄像头,检查摄像头设置的速度。当我检查速度时,相机已停止,因此没有速度可用。是否有一种方法可以让这些函数同时运行,以测试相机的速度。示例代码如下: class VerifyPan(TestAbsoluteMove): def runTest(self): self.dest.PanTilt._x=350 # Runs soap move command

我正在运行测试,但我想同时运行两个函数。我有一个摄像头,我告诉它通过肥皂水移动,然后我通过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')
我现在已经尝试了下面提到的线程模块。该线程与函数TestAbsolutionMove.Ssh()不同步运行。是否有任何其他代码,我需要使这项工作

我已经研究过在thread语句中加入参数,这些参数表示当Ssh()函数运行时线程运行。有人知道在这份声明中输入什么吗

对不起,我解释得不对。“SudsMove”功能移动摄像机,“Ssh”功能登录摄像机并检查摄像机当前的移动速度。问题是,当“Ssh”功能登录到相机时,它已经停止。我需要两个功能并行运行,这样我就可以在相机仍在移动时检查相机的速度


谢谢

导入
线程
模块并运行
SudsMove()
如下:

threading.Thread(target = SudsMove).start()
这将创建并启动一个执行移动的背景线程

对已编辑问题的回答:

据我所知,
testabsolutionmove.Ssh(self)
轮询一次速度,并将结果存储在
self.Value
?!您正在使用
self.assertEqual(self.Value,'3500')
测试预期的末端倾斜/旋转/位置

如果这是正确的,您应该等待相机开始移动。您可能会在某个时间间隔内轮询速度:

# Move camera in background thread
threading.Thread(target = SudsMove).start()

# What does this do?
self.command = './ptzpanposition -c 0 -u degx10'

# Poll the current speed in an interval of 250 ms
import time
measuredSpeedsList = []

for i in xrange(20):
    # Assuming that this call will put the result in self.Value
    TestAbsoluteMove.Ssh(self)
    measuredSpeedsList.append(self.Value)
    time.sleep(0.25)

print "Measured movement speeds: ", measuredSpeedsList

移动速度将是
measuredSpeedsList
中的最大值(即
max(measuredSpeedsList)
)。希望这是有意义的…

一次只能运行一个线程。这已得到广泛的回答。一种解决方案是使用两个单独的过程。上面的答案提供了一些提示。

如果您可以让代码在Jython或IronPython下运行,那么您可以同时运行多个线程;他们没有CPython那种愚蠢的“全局解释器锁”功能。

如果你想使用公共Python实现(CPython),你当然可以使用这个模块,它(你可以将不可pickle的参数传递给子进程,杀死任务,…)提供了一个类似于线程的接口,并且不会受到全局解释器锁的影响


缺点是生成子进程,这比创建线程花费更多的时间;只有当你有很多很短的任务时,这才是一个问题。此外,由于数据在进程之间传递(通过序列化),因此大数据的传递需要很长的时间,并且最终会占用大量内存(因为它在每个进程之间重复)。如果每个任务都需要“很长”的时间,并且每个任务输入和输出的数据都不太大,那么该模块应该很好。

您可以在移动相机时记录速度吗?可能是一个日志文件。你想达到什么目标?我不认为上面的测试是有用的。编辑我的答案来回答你的同步问题。你看过我编辑的答案吗?这有意义吗?可能ssh打开连接花费的时间太长-例如,可能摄像头尝试进行dns查找。在这种情况下,您可能需要更改
testabsolutionmove.Ssh
以使用已打开的连接。可能存在的重复