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多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...
随机推荐
- Escape Sequences in String
Code Output \' single quote \" double quote \\ backslash \n newline \r carriage return \t tab ...
- HTML5 乱记
HTML5 的文档类型声明可以触发所有具备标准模式的浏览器的标准模式,包括那些对 HTML5 一无所知的浏览器,也就是说,可以在任何网页中都使用 HTML5 文档类型声明 <!DOCTYPE h ...
- Win8.1中打不开IE的解决方法
IE11 打不开了,重新安装了IE也解决不了问题,咋整,找了好久终于找到原因,原来是权限的问题,特此和大家共享 解决办法: WIN+R,regedit,找到HKEY_CURRENT_USER\Soft ...
- Android studio 删除Module、project
很简单: 1 选中项目右键:Open Module Setting 2 选择要删除的项目,点击“-”即可
- for循环例题
1· 一对幼兔一个月后长成小兔(每对兔子默认一公一母),再过一个月长成成兔并且生下一对小兔,以此类推,两年后有多少对兔子? Console.Write("输入年:"); ...
- shell小程序
因此需要挑选学生,因此需要一个抓阄的程序:要求:1.执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字.2.第 ...
- java多线程总结五:线程池的原理及实现
1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创 ...
- 多个UITableView横向切换的简单实现(有点类似网易新闻)
实现多列表切换,位置监控,置顶等功能. 方法一: 创建一个TableView,在切换的时候请求各类目需要的数据,然后刷新列表,通过动画模拟出滑动效果. #import <UIKit/UIKit. ...
- JavaScript学习笔记(6)——JavaScript语法之对象
JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. 属性是与对象相关的值. 方法是能够在对象上执行的动作. 提示: ...
- 02_setter注入
工程截图如下 [HelloWorld.java] package com.HigginCui; public class HelloWorld { private String words; publ ...