我想创建一个外壳来控制我使用多处理模块创建的单独进程。可能的?如何?
编辑:
我已经实现了一种向辅助进程发送命令的方法:我code.InteractiveConsole
在该进程中创建了一个,并将其附加到一个输入队列和一个输出队列,这样我就可以从我的主进程命令控制台。但我希望它在一个外壳中,可能是一个wx.py.shell.Shell
,所以程序的用户可以使用它。
我想创建一个外壳来控制我使用多处理模块创建的单独进程。可能的?如何?
编辑:
我已经实现了一种向辅助进程发送命令的方法:我code.InteractiveConsole
在该进程中创建了一个,并将其附加到一个输入队列和一个输出队列,这样我就可以从我的主进程命令控制台。但我希望它在一个外壳中,可能是一个wx.py.shell.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.runcode(代码)
注意:由于一些酸洗问题,我从第一张海报中窃取的 codeStr 可能无法在此处使用。但关键是您可以在 shell 中远程执行自己的 codeStr。
您可以创建一个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
其中,然后在要执行的父进程中读取这些命令。