[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多进程分块读取文件相关推荐

  1. python刷微博关注_[代码全屏查看]-python刷新浪微博粉丝

    [1].[代码] [Python]代码 # -*- coding: utf-8 -*- import urllib, urllib2, cookielib, hashlib,threading imp ...

  2. python处理excel代码_[代码全屏查看]-python处理Excel文件

    [1].[代码] test_xlrd.py #coding=utf-8 ####################################################### #filenam ...

  3. python日历gui_[代码全屏查看]-Python版的农历日历Calendar,功能简单

    [1].[代码] [Python]代码 Python语言: Python版的农历日历Calendar,功能简单 #coding=utf-8 #代码修改自wangfei(wangfei@hanwang. ...

  4. python简单代码hello-[代码全屏查看]-python初学之helloworld

    [2].[文件] data.txt ~ 8KB 下载(25) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ...

  5. java 1kb_[代码全屏查看]-java输入输出流及文件操作

    [文件] List_File_Dir.java ~ 1KB    下载(14) /** *Author:Yuanhonglong *Date:2013-12-15 *1948281915 */ pac ...

  6. python数据分析工资_拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息...

    确定网页的加载方式是JavaScript加载 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是POST 使用requests的post ...

  7. python多线程原理_代码详解Python多线程、多进程、协程-阿里云开发者社区

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一.前言 很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬 ...

  8. python函数能否增强代码可读性_总结的几个Python函数方法设计原则

    在任何编程语言中,函数的应用主要出于以下两种情况: 1.代码块重复,这时候必须考虑用到函数,降低程序的冗余度 2.代码块复杂,这时候可以考虑用到函数,增强程序的可读性 当流程足够繁杂时,就要考虑函数, ...

  9. python解析原理_代码详解:Python虚拟环境的原理及使用

    Python的虚拟环境极大地方便了人们的生活.本指南先介绍虚拟环境的基础知识以及使用方法,然后再深入介绍虚拟环境背后的工作原理. 注意:本指南在macOS Mojave系统上使用最新版本的Python ...

最新文章

  1. 很多学ThinkPHP的新手会遇到的问题
  2. 漫谈回溯(未完待续)
  3. HTC Element Behaviors in Internet Explorer.
  4. Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
  5. 小红书推荐大数据在阿里云上的实践
  6. PHP之常用设计模式
  7. 台灯的内置和外置是什么意思_两款米家台灯:1S/Lite对比简评
  8. 【QT源码】系列01
  9. 开课吧-Java常见面试题:重载和重写的区别?
  10. CF #319 div 2 D
  11. 视频教程-R语言数据分析挖掘实战-大数据
  12. cuda 和 cudnn 下载与安装
  13. win10任务栏透明_Win7升Win10用不惯?让Win10秒变Win7的利器Start10
  14. 51单片机实战教程之C语言基础(十 Keil C51函数库)
  15. 谈谈浏览器中富文本编辑器的技术演进
  16. 分享谷歌浏览器的一个插件-OneTab,非常赞
  17. 企业WiFi安全管家 帮你排忧解难
  18. 中考总分150学计算机专业,中考总分是多少 各科都是多少分
  19. coding平台简易操作
  20. cocos2dx3.2打包apk

热门文章

  1. 子弹短信新发布,支付宝即将入驻
  2. RMAN异机复制数据库(相同路径)
  3. C++ 应用程序性能优化
  4. Win8 .NET Framework 3.5 离线安装
  5. Spanning-tree Potocol(整理)
  6. Servlet基本_オブジェクトのスコープ
  7. linux 上安装ntop
  8. Spring Boot 中使用 Hikari,给我整不会了
  9. golang文件操作:打开关闭文件,带缓冲区的读文件
  10. vue指令:v-pre原样输出,不解析插值表达式