PYTHON多进程样码
敲了一晚上,留个念想。
发现它和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多进程样码的更多相关文章
- Python多进程(1)——subprocess与Popen()
Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持多处理器技 ...
- python 多进程开发与多线程开发
转自: http://tchuairen.blog.51cto.com/3848118/1720965 博文作者参考的博文: 博文1 博文2 我们先来了解什么是进程? 程序并不能单独运行,只有将程 ...
- 【转】【Python】Python多进程与多线程
1.1 multiprocessing multiprocessing是多进程模块,多进程提供了任务并发性,能充分利用多核处理器.避免了GIL(全局解释锁)对资源的影响. 有以下常用类: 类 描述 P ...
- Python代码样例列表
扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│ Python用户推荐系统曼哈顿算法实现.py│ ...
- python多进程-----multiprocessing包
multiprocessing并非是python的一个模块,而是python中多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多 ...
- python多进程multiprocessing Pool相关问题
python多进程想必大部分人都用到过,可以充分利用多核CPU让代码效率更高效. 我们看看multiprocessing.pool.Pool.map的官方用法 map(func, iterable[, ...
- Python多进程和多线程是鸡肋嘛?【转】
GIL是什么 Python的代码执行由 Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到在解释器的主循环中,同时只有一个线程在运行.即每个CPU在任意时 ...
- 如何通过Elasticsearch Scroll快速取出数据,构造pandas dataframe — Python多进程实现
首先,python 多线程不能充分利用多核CPU的计算资源(只能共用一个CPU),所以得用多进程.笔者从3.7亿数据的索引,取200多万的数据,从取数据到构造pandas dataframe总共大概用 ...
- 【Python从入门到精通】(二十五)Python多进程的使用
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...
随机推荐
- 通过样式调整input 中password text默认长度
原文出处 <input >标签内的type分别为password和text时其默认长度和宽度不一致,而在做登陆框时往往需要将它们的长度和宽度设置一致.如下的方法可以通过css控制使其一致: ...
- 【转】The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?...
[转]The content of element type "configuration" must match "(properties?,settings?,typ ...
- ASP获取当前页面带参数的网址(URL地址)的方法
'获取当前Url参数的函数 Function GetUrl() Dim ScriptAddress,Servername,qs ScriptAddress = CStr(Request.ServerV ...
- Opencv——将摄像头拍摄写成视频文件
这里主要利用了Opencv打开摄像头的代码,以及写入视频的函数,只是这里要注意的是摄像头好像没有帧率,在cvCreateVideoWriter,时要自己设置 #include"cv.h&qu ...
- Java实现SSO
摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO ...
- Codevs 1535 封锁阳光大学
1535 封锁阳光大学 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大 ...
- CentOS7 firewall的使用
# 查看区域 firewall-cmd --get-zones # 查看默认区域 firewall-cmd --get-default-zone # 给区域添加永久性服务 firewall-cmd - ...
- Linux负载均衡概念与实践(一)
根据网上文章整理. 负载均衡软件LVS(Linux Virtual Server)概念篇 lvs是在linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡.它是基于linux内核实现的.2 ...
- Google设计理念
Google的十大信条 我们首次拟就这“十大信条”还是在Google刚刚成立没几年的时候.此后,我们时常重新审视这份清单,看看它是否依然适用.我们希望这些信条永不过时,而您也可以监督我们是否遵守了这些 ...
- java basic
//java 声明常量 //final 数据类型 常量名=值; //as: final float PI=3.14f;/ PI=3.14002F //默认浮点为 double //break:跳出多重 ...