python进程池编程实例

原创 2015年07月07日 15:00:40
本实例基于Python的进程池类multiprocessing.Pool,
并对每个进程的结果进行检测;


#!/usr/bin/env python
#coding=utf-8
"""
File: test-pool.py
Author: Hank
Last modified: 2015/6/15 11:40
Desc:
"""


from multiprocessing import Process, Pool
import re
import string
import subprocess
from time import sleep
import types


def detect(rtmp):


    rtmpdump = ['./rtmpdump-detect', '--live']
    rtmpdump_set   = ['-r', rtmp, '--timeout', '5', '--stop', '3', '-o','/dev/null']
    rtmpdump_cmd = rtmpdump + rtmpdump_set
    str_rtmpdump_cmd =(' ').join(rtmpdump_cmd)
    print "RTMPDUMP_CDM =%s" %(str_rtmpdump_cmd)


    rtmpdump_proc = subprocess.Popen(rtmpdump_cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    (stdoutdata, stderrdata) = rtmpdump_proc.communicate()
    print "Process output"
    print ("STDOUT: " + stdoutdata)


    code = '100'


    if rtmpdump_proc.returncode != 0:
        print (str_rtmpdump_cmd + " ERROR!")


    pattern = re.compile(r'ret=(\d)')
    for r in str(stdoutdata).split("\n"):
        try:
            code = pattern.search(r).group(1)
            print "CODE : %s"%(code)
        except Exception:
            code = code


    return "done: " + code


def main():
    pool = Pool(processes=2)
    result = []


    rtmp_list = [ 'rtmp://192.168.1.9/live/abcdefg',
                  'rtmp://192.168.1.9/live/abcdefgvv',
                  'rtmp://192.168.1.9/live/abcdefgvv',
                  'rtmp://192.168.1.9/live/abcdefgtv',
                  'rtmp://192.168.1.99/live/abcdefgv',
                  'rtmp://192.168.1.99/live/abcdefgv']


    for rtmp in rtmp_list:
        print "RTMP: %s" %(rtmp)
        result.append(pool.apply_async(detect, (rtmp,)))


    pool.close()
    pool.join()


    for res in result:
        print res.get()


if __name__ == "__main__":
    main()
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

celery配置多队列实践笔记

0.上下文交代我有一个爬虫任务,5分钟跑一次 我今天又加了一个计算任务,一天只跑一次但是要做大量的运算 我用一个队列(default),结果计算任务堵死了队列,导致所有任务都卡住查了一下决定计算和...

supervisord管理进程详解

Supervisor是由python语言编写,基于linux操作系统的一款服务器管理工具, 用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能。 Supervisor类似于monit, ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

python获得线程调用函数的返回值

threading.Thread 并没有显式的提供获取线程调用函数返回值的方法,需求自己实现。 使用数据库是一个办法: 可以让子线程将数据写到数据库中,消费线程再去数据库中读取数据; 如果不想...

Tornado异步任务的实现之一

前言 刚开始使用用tornado时都很迷惑:tornado不是标榜异步非阻塞解决10K问题的嘛? 但为什么我在handler中有一个步骤是耗时时,整体的响应就慢下了呢? 是不是torando根本...

celery beat实战

测试CELERYBEAT的例子: celery_test     |proj         |__init__.py         |celery.py ...

在tornado中使用celery实现异步任务处理之一

一、简介 tornado-celery是用于Tornado web框架的非阻塞 celery客户端。 通过tornado-celery可以将耗时任务加入到任务队列中处理, 在celery中创建任...

深入理解Tornado——一个异步web服务器

本人的第一次翻译,转载请注明出处:http://www.cnblogs.com/yiwenshengmei/archive/2011/06/08/understanding_tornado.html ...

python torndb使用简介

一、torndb概述 torndb是一个轻量级的基于MySQLdb封装的一个模块,其是tornado框架的一部分。 其项目主页为:https://github.com/bdarnell/tornd...

在tornado中使用celery实现异步任务处理之二

三、tornado结合RabbitMQ实现异步任务处理 3.1 安装环境 1. 安装tornado 见文章《CentOS6.4安装python2.7.3环境和Tornado》 2. 安...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)