我正在研究在python中使用多处理模块并且或多或少地解决了多处理部分,但是在使用和理解Queue功能时遇到了问题!
这是我想要做的,想法是开始一个尾部到文件的进程和第二个进程在服务器上执行命令!这两个进程都使用pexpect连接到服务器,目标是在第二个进程执行命令时捕获日志行。
我设法启动了' tail -f'过程并发送“停止客户端”#39;第二个进程的命令。我从queue1中的尾部进程得到结果但是我从来没有看到queue2中第二个进程的结果!请记住,命令“停止客户”'成功执行,因为我在服务器上看到'客户端已停止'。
我认为我还没有理解如何使用两个不同的过程来处理队列!
任何线索可能都是我的错误思考?
先谢谢。
def connectServer(que): # daemon
child = pexpect.spawn('ssh server1')
child.expect(['(?i)Password'], timeout=20)
child.sendline(password)
child.expect([cmdprompt])
print 'Connected successful'
cmd = 'tail -f ...\n'
child.sendline(cmd)
child.expect([pexpect.TIMEOUT], timeout=30)
before = child.before
child.sendline("exit")
child.close()
before = re.split('\r\n',before)
del before[0]
del before[-1]
que.put(before)
def stopClient(que): # non-deamon
ld = pexpect.spawn('ssh server1')
ld.expect(['(?i)Password'], timeout=20)
ld.sendline(password)
ld.expect([cmdprompt])
cmd = 'stop client'
ld.sendline(cmd)
ld.expect([cmdprompt], timeout=60)
before = ld.before
ld.sendline("exit")
ld.close()
before = re.split('\r\n',before)
que.put(before)
queue1 = multiprocessing.Queue()
c = multiprocessing.Process(name='connectServer', target=connectServer, args=(queue1,))
c.daemon = True
queue2 = multiprocessing.Queue()
s = multiprocessing.Process(name='stopClient', target=stopClient, args=(queue2,))
s.daemon = False
c.start()
time.sleep(1)
s.start()
tmp = queue1.get()
received = '\r\n'.join(tmp)
print(received)
tmp = queue2.get()
received = '\r\n'.join(tmp)
print(received)
c.join()
s.join()