我有两个类用于从命令行自动化 gdb,主类为它创建一个进程以从命令行执行 gdb 命令,然后将命令发送到 gdb_engine 类(我在其中覆盖了 run(( 方法,其中也有与 gdb 相关的函数(根据用户请求。两个单独的进程从保存应完成的作业的队列进行通信。为了完成这项任务,我想到了这个简单的计划:
1-检查队列
2-如果队列为空,则等待,如果没有,则执行队列
中的第一个函数3-重写队列
4-返回 1
但是我在多处理纪录片中找不到任何功能,如果队列为空,则使生成的进程停止/休眠。我确信有一种方法可以做到这一点,但由于我仍然是 python 的初学者,所以我无法轻松找到自己的方法。在这一点上,事情仍然有点混乱。
提前感谢,祝你有美好的一天!(顺便说一句,我使用 python3.4 顺便说一句(
编辑:我现在没有太多事情发生,但仍然在grzgrzgrz3的请求上发布我的代码。代码库有点大,所以我只复制/粘贴与多处理相关的代码库。
GDB_Engine类中,我使用 pexpect 控制 gdb:
class GDB_Engine(Process):
jobqueue=Queue()
def __init__(self):
super(GDB_Engine, self).__init__()
self.jobqueue=GDB_Engine.jobqueue
def run(self):
#empty since I still don't know how to implement that algorithm
主要节目
if __name__ == "__main__":
gdbprocess=GDB_Engine()
gdbprocess.start()
每当我需要做这样的工作时,我只是将项目放入队列中(将 gdb 附加到目标的代码的中间(:
gdbprocess.jobqueue.put("attachgdb")
我关于它的主要想法是生成进程将比较队列中的字符串并在GDB_Engine类中运行指定的函数,以显示示例,这是附加代码:
def attachgdb(self,str):
global p
p=pexpect.spawnu('sudo gdb')
p.expect_exact("(gdb) ")
p.sendline("attach " + str)
p.expect_exact("(gdb) ")
p.sendline("c")
p.expect_exact("Continuing")
我刚刚发现,如果队列为空,get(( 方法会自动阻止进程,所以我问题的答案非常简单。在问之前,我应该尝试更多的方法,看起来这只是我的另一个愚蠢和不必要的问题。