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()

相关文章推荐

python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例

本文简单介绍python进程模块multiprocessing提供的进程池和线程池功能。 进程池和线程池的使用有四种方式:apply_async、apply、map_async、map。其中apply...
  • xiemanR
  • xiemanR
  • 2017年05月12日 16:43
  • 3140

python子进程模块subprocess详解与应用实例 之三

二、应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", "-l"])   0   >>>...

Python多进程通信Queue、Pipe、Value、Array实例

这篇文章主要介绍了Python多进程通信Queue、Pipe、Value、Array实例,queue和pipe用来在进程间传递消息、Value + Array 是python中共享内存映射文件的方法,...
  • lpd3803
  • lpd3803
  • 2017年01月07日 14:35
  • 98

python子进程模块subprocess详解与应用实例 之二

1.2. Popen 对象 Popen类的实例有下列方法: 1. Popen.poll() 检查子进程是否已经结束,设置并返回返回码值。 2. Popen.wait() 等待子进程结...

linux守护进程编程实例

一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是...

多进程编程函数posix_spawn实例

posix_spawn将可执行文件直接吊起,生成一个进程;该示例二中其实有三个进程在运行;main, ls , cat...

进程间通信系列 之 信号量详解及编程实例

进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。这使得一个程序能够在同一时间...

Linux进程编程实例

/*GUN/Linux进程有两种基本类型:内核线程和用户进程(注意一个是线程一个是进程)。 用户进程由fork()和clone()创建。内核线程是由内核中的kernel_thread()创建。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python进程池编程实例
举报原因:
原因补充:

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