多线程框架中采取queue来实现线程间资源的互斥。

在文件过大的情况下,如果都读入内存的话,占用内存就太多了。

这里手动实现了一个多线程调用文件迭代器来使用f.next()

# -*- coding:utf-8 -*-

import threading

class Geturl(object):

    def __init__(self, open_file):
self.open_file = open_file
self.num = 0
self.__mutex = threading.RLock()
self.f = open(self.open_file, 'r')
self.kafka_mutex = threading.RLock() def _line(self):
self.__mutex.acquire()
try:
line = self.f.__next__()
except StopIteration:
line = StopIteration
self.f.close()
'''
if self.num % 1000 == 0:
print(self.num)
self.num += 1
'''
self.__mutex.release()
return line def get_line(self):
return self._line() def _deal(deal_file):
while True:
try:
item = deal_file.get_line()
# 处理工作
if item == StopIteration:
raise ValueError()
except ValueError:
print("all task has done!")
break
except Exception as e:
print("error:", e) if __name__ == "__main__":
filename = 'Bigfile'
geturl = Geturl(filename)
_deal(geturl)

最新文章

  1. Web之路笔记之四
  2. HDU 1005 Number Sequence
  3. 【Django】Django 如何使用 Django设置的日志?
  4. SQLSERVER:通过sys.tables实现批量删表、快速统计多表记录和
  5. 使用Flexible实现手淘H5页面的终端适配【转】
  6. Windows安装pomelo过程
  7. C#.NET数据库访问类DBHelper
  8. jQuery手机对话框插件
  9. 【C语言】浅谈可变参数与printf函数
  10. DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)
  11. python学习第20天
  12. 《Java大学教程》—第14章 抽象、继承和接口
  13. 【*】CAS 是什么,Java8是如何优化 CAS 的
  14. linux 下安装mysql-5.7.12-1.el6.x86_64.rpm-bundle.tar
  15. python windows安装 SQLServer pymssql,
  16. 论文阅读:CNN-RNN: A Unified Framework for Multi-label Image Classification
  17. SharePoint 删除废弃站点步骤
  18. bitset相关
  19. GNU Radio: Overview of the GNU Radio Scheduler
  20. js常用模板引擎

热门文章

  1. [Javascript Crocks] Safely Access Object Properties with `prop`
  2. sqlite3树形结构遍历效率对照測试
  3. 黑马day01 笔记
  4. UVa 572 - Oil Deposits (简单dfs)
  5. Windows 10彻底关闭自动更新
  6. 超级简单的利用javascript实现文件拖拽事件
  7. 图片全屏轮播插件poposlides
  8. idea下的jsp开发中cannot resolve taglib with uri的解决方法
  9. Spark Streaming 整合 Kafka
  10. Fiddler-AutoResponder 修改接口数据