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多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...
随机推荐
- 自己写http获取网络资源和解析json数据
虽然github上有很多开源的,方便的jar报,用起来也很方便,但我们也需要了解其中的原理,如何自己不用第三方jar包来获取网络资源 主要代码如下: 因为联网是耗时的操作,所以需要另开一个线程来执行 ...
- 读jQuery官方文档:jQuery对象
jQuery对象 当用$符号包裹一个CSS风格选择器的时候,你得到一个jQuery对象. var heading = $('h1'); jQuery对象是对DOM ELement封装过后的数组.注意, ...
- sparkSQL1.1入门
http://blog.csdn.net/book_mmicky/article/details/39288715 2014年9月11日,Spark1.1.0忽然之间发布.笔者立即下载.编译.部署了S ...
- myeclipse的新建severlet不见解决方法
点击myeclipse中的window菜单里面选择myeclipse java Enterprise 选项就可以恢复到默认.
- $.get
$('#choice').change(function() { if($(this).val() != '') { $.get( 'data.php', { what: $(this).val() ...
- IOS 高级开发 KVC(二)
前一篇博客最后介绍了KVC 再json 转模型时遇到一些问题.今天接着来介绍KVC 的其他用法.其实我们在一开始的时候就一直再强调命名的重要性.命名规范是KVC 存活的基础.如果没有这个条件支撑,那么 ...
- C#基础总复习01
马上就快毕业了,准备把这几个月所学到的知识梳理一下,这儿所写的都是一些C#中最基础的东西(大牛不要笑话我,这也是我记录的一些笔记等等),希望能帮到一些正在学习这方面的知识的人,如果有写的不对的地方,望 ...
- I/O继承关系图
InputStream/OutputStream继承关系图
- [cocos2d-x 2.0.4][iOS7]不能全屏问题
本篇文章由:http://www.sollyu.com/cocos2d-x-2-0-4-ios7-cannot-be-full-screen-problem/ 说明 ▼ 症状如下图 解决 打开你工程的 ...
- hdu 1047 Integer Inquiry(高精度数)
Problem Description Oneof the first users of BIT's new supercomputer was Chip Diller. He extended hi ...