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多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...
随机推荐
- Activiti初学者教程
http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html 1. 初识Activiti 1.1. 工作流与工作流引擎 工作流(workflow) ...
- oc语言学习之基础知识点介绍(二):类和对象的进一步介绍
一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...
- 整理:sql语句优化之SQL Server
. 增加服务器CPU个数;但是必须明白并行处理串行处理更需要资源例如内存.使用并行还是串行程是MsSQL自动评估选择的.单个任务分解成多个任务,就可 以在处理器上运行.例如耽搁查询的排序.连接.扫描和 ...
- Java实战之02Hibernate-07与效率性能相关配置
十四.其他HIbernate配置(与效率,性能相关) 1.数据库连接池 Hibernate有默认的连接池,性能有问题,不适合实际应用,适合学习阶段.DriverManagerConnectionPro ...
- Arithmetic Expression
时间限制:2000ms 单点时限:200ms 内存限制:256MB 描述 Given N arithmetic expressions, can you tell whose result is cl ...
- Thrift原理与使用实例
一 Thrift框架介绍 1 前言 Thrift是一个跨语言的服务部署框架,最初由Faceboo开发并进入Apache开源项目. Thrift特征如下: 1)Thrift有自己的跨机器通信框架,并提供 ...
- 九度OJ 1499 项目安排 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1499 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时 ...
- echshop 微信扫码支付 遇到的问题
参考的网站 (转)http://www.ecshop119.com/ecshopjc-937.html(转)http://www.6gdown.com/softedupage/58929.html ...
- cetnos 6.7 安装 oracle 11详解
CentOS 6.7下Oracle 11g安装详解 1. 安装环境 Linux服务器:CentOS 6.7 64位 Oracle数据库版本:Oracle 11gR2 64位 2. 配置修改及参数优 ...
- Nginx 域名转发
例如访问www.b.cn直接跳到www.a.cn上去,又不想多域名捆绑一个目录. server { listen 80; server_name www.b.cn; rewrite ^/(.*)$ h ...