博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PYTHON多进程样码
阅读量:4364 次
发布时间:2019-06-07

本文共 5028 字,大约阅读时间需要 16 分钟。

敲了一晚上,留个念想。

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

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

A,多进程函数化实现

import multiprocessingimport timedef 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 multiprocessingimport timeclass 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 -= 1if __name__ == '__main__':    p = ClockProcess(3)    p.start()

C,多进程DAEMON

import multiprocessingimport timedef 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 multiprocessingimport sysdef 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.closedef 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 multiprocessingimport timedef 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 multiprocessingimport timedef 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 multiprocessingimport timedef 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 multiprocessingdef writer_proc(q):    try:        q.put(1, block=False)        q.put(2, block=False)        q.put(3, block=False)    except:        passdef reader_proc(q):    try:        print q.get(block=False)        print q.get(block=False)        print q.get(block=False)    except:        passif __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,明天补上。

转载于:https://www.cnblogs.com/aguncn/p/4995900.html

你可能感兴趣的文章
[C#]通过反射访问类私有成员
查看>>
APP开发---Windows查看端口是否被占用
查看>>
浅谈JavaScript中的eval()
查看>>
Unity3D中的线性插值Lerp()函数解析
查看>>
学到的一种把数据集序列化为本地文件的方法
查看>>
Hadoop部署配置文件
查看>>
阿里云-域名免费申请ssl证书过程
查看>>
android studio 2.2 使用cmake编译NDK
查看>>
解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题
查看>>
Android SurfaceView实战 打造抽奖转盘
查看>>
SQL查询原理及执行顺序
查看>>
浅拷贝深拷贝Python对象的拷贝
查看>>
列表代码我的第一个封装js代码-----展开收起效果
查看>>
5_4学生类
查看>>
利用cv与matplotlib.pyplot读图片与显示图片
查看>>
算法——(转)动态规划入门
查看>>
webpack 的sass-loader打包出错问题,提示 Module not found: Error: Can't resolve '*.css' 的问题...
查看>>
HDOJ---2066 一个人的旅行[Dijkstra算法]
查看>>
35个jQuery小技巧!
查看>>
20140308 std::fill
查看>>