敲了一晚上,留个念想。

发现它和LINUX的C编程差不多,就是作了PYTHON化的语法封装。

以后希望有机会能用上。。

A,多进程函数化实现

import multiprocessing
import time

def worker_1(interval):
    n = 5
    while n > 0:
        # print('The time is {0}'.format(time.ctime()))
        print 'start worker_1'
        time.sleep(interval)
        n -= 1
        print 'end worker_1'

def worker_2(interval):
    n = 5
    while n > 0:
        # print('The time is {0}'.format(time.ctime()))
        print 'start worker_2'
        time.sleep(interval)
        n -= 1
        print 'end worker_2'

def worker_3(interval):
    n = 5
    while n > 0:
        # print('The time is {0}'.format(time.ctime()))
        print 'start worker_3'
        time.sleep(interval)
        n -= 1
        print 'end worker_3'

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=worker_1, args=(1,))
    p2 = multiprocessing.Process(target=worker_2, args=(2,))
    p3 = multiprocessing.Process(target=worker_3, args=(3,))

    p1.start()
    p2.start()
    p3.start()

    print 'The number of CPU is:' + str(multiprocessing.cpu_count())
    for p in multiprocessing.active_children():
        print 'child p.name:' + p.name + '\tp.id' + str(p.pid)
    print 'END!!!!!!!!!!!'

B,多进程类实现

import multiprocessing
import time

class ClockProcess(multiprocessing.Process):
    def __init__(self, interval):
        multiprocessing.Process.__init__(self)
        self.interval = interval

    def run(self):
        n = 5
        while n >0:
            print 'The time is {0}'.format(time.ctime())
            time.sleep(self.interval)
            n -= 1

if __name__ == '__main__':
    p = ClockProcess(3)
    p.start()

C,多进程DAEMON

import multiprocessing
import time

def worker(interval):
    print 'worker start:{0}'.format(time.ctime())
    time.sleep(interval)
    print 'worker end:{0}'.format(time.ctime())

if __name__ == '__main__':
    p = multiprocessing.Process(target=worker, args=(3,))
    p.daemon = True
    p.start()
    p.join()
    print 'end'

D,LOCK

import multiprocessing
import sys

def worker_with(lock, f):
    with lock:
        fs = open(f, 'a+')
        n = 10
        while n > 1:
            fs.write('Lock acquired via with\n')
            n -= 1
        fs.close

def worker_no_with(lock, f):
    lock.acquire()
    try:
        fs = open(f, 'a+')
        n = 10
        while n > 1:
            fs.write('Lock acquired directly\n')
            n -= 1
        fs.close()
    finally:
        lock.release()

if __name__ == '__main__':
    lock = multiprocessing.Lock()
    f = 'file.txt'
    w = multiprocessing.Process(target=worker_with, args=(lock, f))
    nw = multiprocessing.Process(target=worker_no_with, args=(lock, f))
    w.start()
    nw.start()
    print 'end'
    

E。SEMAPHORE

import multiprocessing
import time

def worker(s, i):
    s.acquire()
    print(multiprocessing.current_process().name +'acquire')
    time.sleep(i)
    print(multiprocessing.current_process().name + 'release')
    s.release()

if __name__ == '__main__':
    s = multiprocessing.Semaphore(2)
    for i in range(5):
        print i
        p = multiprocessing.Process(target=worker, args=(s, i))
        p.start()

F,EVENT

import multiprocessing
import time

def wait_for_event(e):
    print 'wait_for_event: starting'
    e.wait()
    print 'wait_for_event: e.is_set()->' + str(e.is_set())

def wait_for_event_timeout(e, t):
    print 'wait_for_event_timeout: starting'
    e.wait(t)
    print 'wait_for_event_timeout: e.is_set()->' + str(e.is_set())

if __name__ == '__main__':
    e = multiprocessing.Event()
    w1 = multiprocessing.Process(name='block',
                                 target=wait_for_event,
                                 args=(e,))
    w2 = multiprocessing.Process(name='non-block',
                                 target=wait_for_event_timeout,
                                 args=(e,2))
    w1.start()
    w2.start()
    time.sleep(3)
    e.set()
    print 'main: event is set'

G,PIPE

import multiprocessing
import time

def proc1(pipe):
    while True:
        for i in xrange(10):
            print 'proc1 send: %s' % (i)
            pipe.send(i)
            time.sleep(1)

def proc2(pipe):
    while True:
        print 'proc2 rev:', pipe.recv()
        time.sleep(1)

if __name__ == '__main__':
    pipe = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=proc1, args=(pipe[0],))
    p2 = multiprocessing.Process(target=proc2, args=(pipe[1],))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

H。Queue

import multiprocessing

def writer_proc(q):
    try:
        q.put(1, block=False)
        q.put(2, block=False)
        q.put(3, block=False)
    except:
        pass

def reader_proc(q):
    try:
        print q.get(block=False)
        print q.get(block=False)
        print q.get(block=False)
    except:
        pass

if __name__ == '__main__':
    q = multiprocessing.Queue()
    writer = multiprocessing.Process(target=writer_proc, args=(q,))
    writer.start()

    reader = multiprocessing.Process(target=reader_proc, args=(q,))
    reader.start()

    reader.join()
    writer.join()

照搬:

http://www.cnblogs.com/kaituorensheng/p/4445418.html

还有一个POOL,明天补上。

PYTHON多进程样码的更多相关文章

  1. Python多进程(1)——subprocess与Popen()

    Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持多处理器技 ...

  2. python 多进程开发与多线程开发

    转自: http://tchuairen.blog.51cto.com/3848118/1720965 博文作者参考的博文:  博文1  博文2 我们先来了解什么是进程? 程序并不能单独运行,只有将程 ...

  3. 【转】【Python】Python多进程与多线程

    1.1 multiprocessing multiprocessing是多进程模块,多进程提供了任务并发性,能充分利用多核处理器.避免了GIL(全局解释锁)对资源的影响. 有以下常用类: 类 描述 P ...

  4. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  5. python多进程-----multiprocessing包

    multiprocessing并非是python的一个模块,而是python中多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多 ...

  6. python多进程multiprocessing Pool相关问题

    python多进程想必大部分人都用到过,可以充分利用多核CPU让代码效率更高效. 我们看看multiprocessing.pool.Pool.map的官方用法 map(func, iterable[, ...

  7. Python多进程和多线程是鸡肋嘛?【转】

    GIL是什么 Python的代码执行由 Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行.即每个CPU在任意时 ...

  8. 如何通过Elasticsearch Scroll快速取出数据,构造pandas dataframe — Python多进程实现

    首先,python 多线程不能充分利用多核CPU的计算资源(只能共用一个CPU),所以得用多进程.笔者从3.7亿数据的索引,取200多万的数据,从取数据到构造pandas dataframe总共大概用 ...

  9. 【Python从入门到精通】(二十五)Python多进程的使用

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...

随机推荐

  1. Activiti初学者教程

    http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html 1. 初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow) ...

  2. oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

  3. 整理:sql语句优化之SQL Server

    . 增加服务器CPU个数;但是必须明白并行处理串行处理更需要资源例如内存.使用并行还是串行程是MsSQL自动评估选择的.单个任务分解成多个任务,就可 以在处理器上运行.例如耽搁查询的排序.连接.扫描和 ...

  4. Java实战之02Hibernate-07与效率性能相关配置

    十四.其他HIbernate配置(与效率,性能相关) 1.数据库连接池 Hibernate有默认的连接池,性能有问题,不适合实际应用,适合学习阶段.DriverManagerConnectionPro ...

  5. Arithmetic Expression

    时间限制:2000ms 单点时限:200ms 内存限制:256MB 描述 Given N arithmetic expressions, can you tell whose result is cl ...

  6. Thrift原理与使用实例

    一 Thrift框架介绍 1 前言 Thrift是一个跨语言的服务部署框架,最初由Faceboo开发并进入Apache开源项目. Thrift特征如下: 1)Thrift有自己的跨机器通信框架,并提供 ...

  7. 九度OJ 1499 项目安排 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1499 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时 ...

  8. echshop 微信扫码支付 遇到的问题

    参考的网站 (转)http://www.ecshop119.com/ecshopjc-937.html(转)http://www.6gdown.com/softedupage/58929.html  ...

  9. cetnos 6.7 安装 oracle 11详解

    CentOS 6.7下Oracle 11g安装详解   1. 安装环境 Linux服务器:CentOS 6.7 64位 Oracle数据库版本:Oracle 11gR2 64位 2. 配置修改及参数优 ...

  10. Nginx 域名转发

    例如访问www.b.cn直接跳到www.a.cn上去,又不想多域名捆绑一个目录. server { listen 80; server_name www.b.cn; rewrite ^/(.*)$ h ...