如何在python

时间:2016-04-02 20:05:47

标签: python-2.7 multiprocessing

我的要求是从项目服务器日志文件中捕获发送到服务器的特定http请求的日志。所以编写了两个函数并尝试使用多处理模块并行执行它们。 但只有一个被执行。不确定出了什么问题。

我的两个函数 - run_remote_command - 使用paramiko模块在远程服务器(linux box)上执行tail命令并将输出重定向到文件。并且 send_request - 使用请求模块从本地系统(Windows笔记本电脑)向服务器发出POST请求。

代码:

import multiprocessing as mp
import paramiko
import datetime
import requests

def run_remote_command():
    basename = "sampletrace"
    suffixname = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
    filename = "_".join([basename, suffixname])
    print filename
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:                                              
        ssh.connect(hostname='x.x.x.x',username='xxxx',password='xxxx')
    except Exception as e:
        print "SSH Connecting to Host failed"
        print e
        ssh.close()
    print ssh
    tail = "tail -1cf /var/opt/logs/myprojectlogFile.txt >"
    cmdStr = tail + " " + filename 
    result = ''
    try:
        stdin, stdout, stderr = ssh.exec_command(cmdStr)
        print "error:" +str( stderr.readlines())
        print stdout
        #logger.info("return output : response=%s" %(self.resp_result))
    except Exception as e:
        print 'Run remote command failed cmd'
        print e
        ssh.close() 

def send_request():
    request_session = requests.Session()
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    data = "some data " 
    URL = "http://X.X.X.X:xxxx/request"
    request_session.headers.update(headers)
    resp = request_session.post(URL, data=data)
    print resp.status_code
    print resp.request.headers
    print resp.text

def runInParallel(*fns):
    proc = []
    for fn in fns:
        p = mp.Process(target=fn)
        p.start()
        proc.append(p)
    for p in proc:
        p.join()

if __name__ == '__main__':
    runInParallel(run_remote_command, send_request)    

输出仅执行 send_request 功能。即使我检查服务器的进程列表,也没有创建尾部进程

200

根据@Ilja评论编辑代码

0 个答案:

没有答案