1

我想创建一个外壳来控制我使用多处理模块创建的单独进程。可能的?如何?

编辑:

我已经实现了一种向辅助进程发送命令的方法:我code.InteractiveConsole在该进程中创建了一个,并将其附加到一个输入队列和一个输出队列,这样我就可以从我的主进程命令控制台。但我希望它在一个外壳中,可能是一个wx.py.shell.Shell,所以程序的用户可以使用它。

4

2 回答 2

1
  1. 首先创建外壳
  2. 通过将本地变量设为空,将 shell 与您的应用程序分离
  3. 创建您的代码字符串
  4. 编译代码字符串,得到一个代码对象
  5. 在shell中执行代码对象
    从 wx.py.shell 导入外壳

    frm = wx.Frame(无)
    sh = 壳牌(frm)
    frm.Show()    
    sh.interp.locals = {}
    codeStr = """
    从多处理导入进程,队列

    定义 f(q):
        q.put([42, 无, '你好'])

    q = 队列()   
    p = 进程(目标=f,args=(q,))
    p.start()
    print q.get() # 打印 "[42, None, 'hello']"
    p.join()
    """

    代码 = 编译(codeStr,'','exec')
    sh.interp.runco​​de(代码)

注意:由于一些酸洗问题,我从第一张海报中窃取的 codeStr 可能无法在此处使用。但关键是您可以在 shell 中远程执行自己的 codeStr。

于 2009-05-21T12:13:52.093 回答
0

您可以创建一个Queue传递给单独进程的文件。来自Python 文档

from multiprocessing import Process, Queue

def f(q):
    q.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=(q,))
    p.start()
    print q.get()    # prints "[42, None, 'hello']"
    p.join()

示例:wx.py.shell.Shell 文档中,构造参数给出为

__init__(self, parent, id, pos, size, style, introText, locals, 
         InterpClass, startupScript, execStartupScript, *args, **kwds) 

我没有尝试过,但locals可能是一个局部变量字典,你可以将它传递给 shell。所以,我会尝试以下方法:

def f(cmd_queue):
    shell = wx.py.shell.Shell(parent, id, pos, size, style, introText, locals(),
                              ...)

q = Queue()
p = Process(target=f, args=(q,))
p.start()

在 shell 内部,您应该能够将您的命令放入cmd_queue其中,然后在要执行的父进程中读取这些命令。

于 2009-05-14T21:27:00.443 回答