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多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...
随机推荐
- Extjs combo赋值与刷新的先后顺序
今天在跟一个弹出框中的多选下拉框赋值并实现反选的时候.惊讶的发现:原来我之前对于Combo的赋值的认知观是错误的. 我开始在窗体的beforeshow事件中对Combo控件赋值.开始使用了setVal ...
- C#开发微信门户及应用-使用地理位置扩展相关应用
C#开发微信门户及应用-使用地理位置扩展相关应用 我们知道,地理位置信息可以用来做很多相关的应用,除了我们可以知道用户所在的位置,还可以关联出一些地理位置的应用,如天气,热映影片,附近景点,附近影院, ...
- SQLSERVER2012用户登录error40
昨天晚上公司停电了,电脑非正常关闭,今早回来之后,用sa登录sqlserver,一直报error40这个错,以前没碰到过,所以很紧张,问东问西,在网上也搜了好多,也跟着配置了好多,都不行,快被逼疯的时 ...
- PHP 实现对象的持久层,数据库使用MySQL
http://www.xuebuyuan.com/1236808.html 心血来潮,做了一下PHP的对象到数据库的简单持久层. 不常用PHP,对PHP也不熟,关于PHP反射的大部分内容都是现学的. ...
- c#转义字符串中的所有正则特殊字符
/// <summary> /// 转义字符串中所有正则特殊字符 /// </summary> /// <param name="input"> ...
- 利用Ajax改变发送请求方式
由于测试的时候需要模拟Head请求,解决办法:先访问要请求的站点,然后在浏览器的控制台下执行如下代码,请求方式就为参数给的值: var xmlHttp; if (window.ActiveXObjec ...
- eclipse项目文件编码格式和项目不一致的修改方法
eclipse导入了一个项目,并把其属性设置成了UTF-8,但是打开里面的文档之后,发现还是乱码,看了下属性,发现文档竟然还是GBK的编码 于是就百度了下,发现了解决方法,现在和大家分享下,希望能帮到 ...
- C# ACM poj1003
这题很有内涵,先用简单方法 public static void acm1003(double a) { ) { return; } ; ) { / b; a = a - c; b++; } Cons ...
- ios - cordova(phoneGap)
安装教程 下载 node.js. http://nodejs.org/ 下载后,直接安装就可以了. 安装 Cordova工具, $ sudo npm install -g cordova 创建APP: ...
- C. Sonya and Queries
http://codeforces.com/contest/714/problem/C 看到这题目,想想,肯定不能暴力啊,如果用map,如何快速找到满足要求的数目,然后,长度18,我想,这不是熟悉的t ...