敲了一晚上,留个念想。

发现它和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,明天补上。

最新文章

  1. Jade 模板引擎使用
  2. Spring中Bean的作用域
  3. java 多线程--- Thread Runnable Executors
  4. sqlmap 技巧整理
  5. toB的产品经理和toc产品经理区别
  6. C语言统计一个字符串中单词的个数
  7. 解决Win8.1 / Win Server 2012 r2 下安装 Visual Studio 时一直要求重新启动的问题(原创)
  8. desc跟asc
  9. springmvc 基础
  10. VJGUI消息设计-兼谈MFC、QT和信号/槽机制
  11. 《TCP/IP作品详细解释2:实现》笔记--Radix树路由表
  12. openstack私有云布署实践【13.1 网络Neutron-compute节点配置(科兴环境)】
  13. IT轮子系列(三)——如何给返回类型添加注释——Swagger的使用(二)
  14. spring cloud 入门系列六:使用Zuul 实现API网关服务
  15. cocos 碰撞系统
  16. wget命令使用报错 certificate common name 'xxx' doesn't match requestde host name
  17. error_Could not load file or assembly
  18. Ioc原理理解
  19. MATLAB的一些小经验,记下来,facilitate future work
  20. Django Ajax学习一

热门文章

  1. JavaScript高级程序设计(第三版)学习笔记8、9、10章
  2. GlusterFS集群文件系统概述
  3. SQL Server高级内容之表表达式和复习
  4. 错误源:WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive).
  5. ###Maintainable C++
  6. iOS开发——手机号,密码,邮箱,身份证号,中文判断
  7. iOS开发——https+证书
  8. JS原型与原型链终极详解(转)
  9. sublime text 使用
  10. 将博客搬迁至CSDN