在Python中暂停执行

2024-04-26 22:11:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在执行一个Python插件,它是一个大型C++程序的一部分。这个程序的目标是允许用户在Python中输入命令的操作。它当前从C++函数接收字符串,并通过执行()函数运行它。然后,用户可以使用API来影响较大的C++程序的更改。在

我正在开发的当前特性是暂停执行特性。它需要记住它在代码执行中的位置以及任何局部变量的状态,并在满足条件后继续执行。我对Python不是很熟悉,我想知道如何实现这个特性。我的第一个设计理念:

1)使用yield命令。 这在一开始似乎是个好主意,因为当你使用下一个命令时,它会记住我需要它的所有内容,但问题是yield只返回到调用堆栈中我所能判断的上一个级别。因此,如果用户调用一个函数,它将只返回用户的代码,而不是更大的C++程序。据我所知,没有一种方法可以将yield命令传播到堆栈上???在

2)穿线 创建一个主python线程,该线程为每个命令创建一个线程。这个主线程将为执行的每个命令生成一个线程,并在执行完命令时终止它。如果它需要挂起并重新启动,它可以通过一个锁队列来完成。在

这是我仅有的两个选择。我不确定收益函数是否会起作用,或者它的设计目的是什么。我认为开发线程可能需要很长时间。我也在Python中寻找某种任务模块,但是找不到我想要的东西。我想知道是否有人有其他的建议,因为我不太熟悉Python。在

编辑:正如评论中提到的,我没有解释脚本“暂停”时需要发生什么。Python插件需要允许C++程序继续执行。在我看来,这意味着A)如果我们讨论的是单线程方法,则返回,或者B)发送消息(函数调用?)到C++ +/p>

编辑编辑:如前所述,我没有完全解释问题描述。我将发表另一篇文章,更好地说明当前存在的内容,以及需要发生的事情,并提供一些sudo代码。我是新来的堆栈溢出,所以如果这不是适当的反应,请让我知道。在


Tags: 方法函数代码用户命令程序插件编辑
2条回答

如果您需要与C程序通信,那么套接字可能是最好的选择。在

https://docs.python.org/2/library/socket.html

两个程序中的一个用作套接字服务器,另一个作为套接字客户端连接到它。当您希望C++程序继续时,您使用^ {CD1}}来发送一个继续消息。然后,你的Python程序将使用^ {CD2}},这将导致它等待,直到它从C++程序中接收到消息为止。在

如果需要两个程序互相发送信号,这可能是最安全的方法。在

每当用Python发送信号时,执行都会立即暂停,直到使用的信号处理程序函数完成执行为止;此时,执行将从停止的地方继续。我的建议是使用一个用户定义的信号(signal.SIGUSR1和{})。请参阅此处的signal文档:

https://docs.python.org/2/library/signal.html

在程序开始时,您需要定义如下信号处理程序函数:

def signal_pause(signum, frame):
  if signum == signal.SIGUSR1:
    # Do your pause here - function processing, etc
  else:
    pass

然后在主程序的某个地方,您将切换出您刚刚创建的默认信号处理程序:

^{pr2}$

最后,每当您想暂停时,您将发送SIGUSR1信号,如下所示:

os.kill(os.getpid(),signal.SIGUSR1)

您的代码将立即暂停,保存其状态,然后转到signal_pause函数执行您需要执行的任何操作。一旦该函数退出,将恢复正常程序执行。在

编辑:这假设你想在暂停程序时做一些复杂的事情。如果您只想等待几秒钟或请求一些用户输入,有一些更简单的方法(time.sleep或{})。在

编辑编辑:这假设您使用的是Unix系统。在

相关问题 更多 >