python中的多处理和队列问题

时间:2014-06-05 09:03:04

标签: python queue multiprocessing

我正在研究在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()

0 个答案:

没有答案