在python中,如何使派生进程永远等待一个项出现在队列中

2024-09-28 13:26:29 发布

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

我有两个类用于从命令行自动执行gdb,main类为它创建一个进程,以便从命令行执行gdb命令,然后根据用户请求将命令发送到gdb\u engine类(我在中重写了run()方法,其中还包含与gdb相关的函数)。这两个独立的进程通过队列进行通信,队列中包含了应该完成的作业。为了完成这个任务,我想到了一个简单的计划:

1-检查队列
2-如果队列为空,则等待,如果不是,则执行队列中的第一个函数
3-重写队列
4-返回1

但是我在多处理记录片中找不到任何函数来在队列为空时使派生的进程停止/休眠。我确信有办法做到这一点,但由于我还是python的初学者,我很难找到自己的方法。目前情况仍有点混乱。你知道吗

提前谢谢,祝您愉快!(我使用python3.4 btw,如果有必要的话)

编辑:我现在没有太多的事情要做,但仍然张贴在grzgrz3的要求我的代码。代码库有点大,所以我只复制/粘贴与多处理相关的代码。你知道吗

GDB\u引擎类,其中我使用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èu引擎类中运行指定的函数,以显示一个示例,下面是附加代码:

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")

Tags: 函数代码命令行self队列进程maindef
1条回答
网友
1楼 · 发布于 2024-09-28 13:26:29

我刚刚发现get()方法会在队列为空时自动阻止进程,所以我的问题的答案非常简单。我应该在问之前多尝试一下这些方法,看起来这只是我的又一个愚蠢又不必要的问题。你知道吗

相关问题 更多 >

    热门问题