python 代码分块_[代码全屏查看]-python多进程分块读取文件
[1].[代码] [Python]代码
# -*- coding: GBK -*-
import urlparse
import datetime
import os
from multiprocessing import Process,Queue,Array,RLock
"""
多进程分块读取文件
"""
WORKERS = 4
BLOCKSIZE = 100000000
FILE_SIZE = 0
def getFilesize(file):
"""
获取要读取文件的大小
"""
global FILE_SIZE
fstream = open(file,'r')
fstream.seek(0,os.SEEK_END)
FILE_SIZE = fstream.tell()
fstream.close()
def process_found(pid,array,file,rlock):
global FILE_SIZE
global JOB
global PREFIX
"""
进程处理
Args:
pid:进程编号
array:进程间共享队列,用于标记各进程所读的文件块结束位置
file:所读文件名称
各个进程先从array中获取当前最大的值为起始位置startpossition
结束的位置endpossition (startpossition+BLOCKSIZE) if (startpossition+BLOCKSIZE)
if startpossition==FILE_SIZE则进程结束
if startpossition==0则从0开始读取
if startpossition!=0为防止行被block截断的情况,先读一行不处理,从下一行开始正式处理
if 当前位置 <=endpossition 就readline
否则越过边界,就从新查找array中的最大值
"""
fstream = open(file,'r')
while True:
rlock.acquire()
print 'pid%s'%pid,','.join([str(v) for v in array])
startpossition = max(array)
endpossition = array[pid] = (startpossition+BLOCKSIZE) if (startpossition+BLOCKSIZE)
rlock.release()
if startpossition == FILE_SIZE:#end of the file
print 'pid%s end'%(pid)
break
elif startpossition !=0:
fstream.seek(startpossition)
fstream.readline()
pos = ss = fstream.tell()
ostream = open('/data/download/tmp_pid'+str(pid)+'_jobs'+str(endpossition),'w')
while pos
#处理line
line = fstream.readline()
ostream.write(line)
pos = fstream.tell()
print 'pid:%s,startposition:%s,endposition:%s,pos:%s'%(pid,ss,pos,pos)
ostream.flush()
ostream.close()
ee = fstream.tell()
fstream.close()
def main():
global FILE_SIZE
print datetime.datetime.now().strftime("%Y/%d/%m %H:%M:%S")
file = "/data/pds/download/scmcc_log/tmp_format_2011004.log"
getFilesize(file)
print FILE_SIZE
rlock = RLock()
array = Array('l',WORKERS,lock=rlock)
threads=[]
for i in range(WORKERS):
p=Process(target=process_found, args=[i,array,file,rlock])
threads.append(p)
for i in range(WORKERS):
threads[i].start()
for i in range(WORKERS):
threads[i].join()
print datetime.datetime.now().strftime("%Y/%d/%m %H:%M:%S")
if __name__ == '__main__':
main()
python 代码分块_[代码全屏查看]-python多进程分块读取文件相关推荐
- python刷微博关注_[代码全屏查看]-python刷新浪微博粉丝
[1].[代码] [Python]代码 # -*- coding: utf-8 -*- import urllib, urllib2, cookielib, hashlib,threading imp ...
- python处理excel代码_[代码全屏查看]-python处理Excel文件
[1].[代码] test_xlrd.py #coding=utf-8 ####################################################### #filenam ...
- python日历gui_[代码全屏查看]-Python版的农历日历Calendar,功能简单
[1].[代码] [Python]代码 Python语言: Python版的农历日历Calendar,功能简单 #coding=utf-8 #代码修改自wangfei(wangfei@hanwang. ...
- python简单代码hello-[代码全屏查看]-python初学之helloworld
[2].[文件] data.txt ~ 8KB 下载(25) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ...
- java 1kb_[代码全屏查看]-java输入输出流及文件操作
[文件] List_File_Dir.java ~ 1KB 下载(14) /** *Author:Yuanhonglong *Date:2013-12-15 *1948281915 */ pac ...
- python数据分析工资_拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息...
确定网页的加载方式是JavaScript加载 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是POST 使用requests的post ...
- python多线程原理_代码详解Python多线程、多进程、协程-阿里云开发者社区
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一.前言 很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬 ...
- python函数能否增强代码可读性_总结的几个Python函数方法设计原则
在任何编程语言中,函数的应用主要出于以下两种情况: 1.代码块重复,这时候必须考虑用到函数,降低程序的冗余度 2.代码块复杂,这时候可以考虑用到函数,增强程序的可读性 当流程足够繁杂时,就要考虑函数, ...
- python解析原理_代码详解:Python虚拟环境的原理及使用
Python的虚拟环境极大地方便了人们的生活.本指南先介绍虚拟环境的基础知识以及使用方法,然后再深入介绍虚拟环境背后的工作原理. 注意:本指南在macOS Mojave系统上使用最新版本的Python ...
最新文章
- 很多学ThinkPHP的新手会遇到的问题
- 漫谈回溯(未完待续)
- HTC Element Behaviors in Internet Explorer.
- Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
- 小红书推荐大数据在阿里云上的实践
- PHP之常用设计模式
- 台灯的内置和外置是什么意思_两款米家台灯:1S/Lite对比简评
- 【QT源码】系列01
- 开课吧-Java常见面试题:重载和重写的区别?
- CF #319 div 2 D
- 视频教程-R语言数据分析挖掘实战-大数据
- cuda 和 cudnn 下载与安装
- win10任务栏透明_Win7升Win10用不惯?让Win10秒变Win7的利器Start10
- 51单片机实战教程之C语言基础(十 Keil C51函数库)
- 谈谈浏览器中富文本编辑器的技术演进
- 分享谷歌浏览器的一个插件-OneTab,非常赞
- 企业WiFi安全管家 帮你排忧解难
- 中考总分150学计算机专业,中考总分是多少 各科都是多少分
- coding平台简易操作
- cocos2dx3.2打包apk