python同时有两个代码,如何只运行一个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python同时有两个代码,如何只运行一个相关的知识,希望对你有一定的参考价值。

参考技术A 第1种方法就是使用Jupyter编写Python代码, 把不同的内容编写在不同的代码块里面,这样的话我们就可以单独运行某一个代码块,而不需运行整个文件;
2.
使用Python进行代码编写时,将其设置为科学模式,并在函数前面添加#%%标志,然后也可以达到一个一个代码块的效果。企业可以单独运行某一个部分

如何同时运行两个函数

【中文标题】如何同时运行两个函数【英文标题】:How to run two functions simultaneously 【发布时间】:2010-01-21 09:32:58 【问题描述】:

我正在运行测试,但我想同时运行 2 个函数。我有一个摄像头,我告诉它通过 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() 同步运行。我还需要其他代码来完成这项工作吗?

我已经研究了将参数放入线程语句中,以表明线程在 Ssh() 函数时运行。有谁知道在这个语句中输入什么?

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

谢谢

【问题讨论】:

您可以在移动相机时记录速度吗?也许到一个日志文件。你想达到什么目的?反正我觉得上面的测试没什么用。 编辑了我的答案以回答您的同步问题。 你看过我编辑的答案吗?有意义吗? 也许 ssh 需要很长时间才能打开连接 - 例如,相机可能会尝试进行 dns 查找。在这种情况下,您可能需要更改 TestAbsoluteMove.Ssh 以使用已打开的连接。 Python: How can I run python functions in parallel?的可能重复 【参考方案1】:

导入threading 模块并像这样运行SudsMove()

threading.Thread(target = SudsMove).start()

这将创建并启动一个执行移动的后台线程。

回答已编辑的问题:

据我了解,TestAbsoluteMove.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))。希望这是有道理的......

【讨论】:

【参考方案2】:

如果你想使用通用的 Python 实现(CPython),你当然可以使用multiprocessing 模块,does wonders(你可以将不可腌制的参数传递给子进程,杀死任务,...),提供了一个接口类似于线程,不受全局解释器锁的影响。

缺点是会产生子进程,比创建线程需要更多时间;如果您有很多很多短期任务,这应该只是一个问题。此外,由于数据在进程之间传递(通过序列化),大数据既需要很长时间才能传递,最终会占用大量内存(因为它在每个进程之间重复)。在每个任务花费“较长”时间并且每个任务进出的数据不是太大的情况下,multiprocessing 模块应该很棒。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于python同时有两个代码,如何只运行一个的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio代码;如何并排打开两个Python shell

运行多个 python 脚本,一个要求输入,不允许输入脚本运行。另外,我如何同时运行脚本(Python)

如何在 asyncio 中同时运行任务?

如何同时运行两个函数

当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)

为啥框架集中两个子页面不能同时运行settimeout或者setInterval函数