精华内容
下载资源
问答
  • 但线程中readlines()就已经全部读完文件了...这个问题使用线程的效率价值在requests处,200M的文件读取还轮不到谈文件读取多线程加速。实际上因为GIL,在python多线程中你也无法提高IO速度。import requestsimpo...

    但线程中readlines()就已经全部读完文件了,

    多线程共同调用同一个文件对象的io方法会造成偏移量错误的问题,你需要锁。(python3 有 os.pread 函数,这个是原子操作,可以不用锁)。

    这个问题使用线程的效率价值在requests处,200M的文件读取还轮不到谈文件读取的多线程加速。实际上因为GIL,在python的多线程中你也无法提高IO速度。

    import requests

    import multiprocessing

    import sys

    urlfile = "url.txt"

    def gen_urls(filename):

    with open(filename, "r") as f:

    l = f.readline()

    while l:

    l = l.strip(" ")

    yield l

    l = f.readline()

    def check_url(url):

    res = requests.get(url)

    print("{s}: {u}".format(s=res.status_code, u=url))

    def run_in_pool():

    pool = multiprocessing.Pool(processes=8)

    for url in gen_urls(urlfile):

    print("To pool: {}".format(url))

    pool.apply_async(check_url, (url,))

    pool.close()

    pool.join()

    print("done")

    def run_in_one():

    for url in gen_urls(urlfile):

    print("To pool: {}".format(url))

    check_url(url)

    print("done")

    if __name__ == "__main__":

    if sys.argv.pop() == "m":

    run_in_pool()

    else:

    run_in_one()

    展开全文
  • python多线程读取文件

    2016-12-26 18:04:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
    # -*- coding: utf-8 -*-
    import os,time
    import threading
    
    rlock = threading.RLock()
    curPosition = 0
    
    class Reader(threading.Thread):
        def __init__(self, res):
            self.res = res
            super(Reader, self).__init__()
        def run(self):
            global curPosition
            fstream = open(self.res.fileName, 'r')
            while True:
                #锁定共享资源
                rlock.acquire()
                startPosition = curPosition
                curPosition = endPosition = (startPosition + self.res.blockSize) if (startPosition + self.res.blockSize) < self.res.fileSize else self.res.fileSize
                #释放共享资源
                rlock.release()
                if startPosition == self.res.fileSize:
                    break
                elif startPosition != 0:
                    fstream.seek(startPosition)
                    fstream.readline()
                pos = fstream.tell()
                while pos < endPosition:
                    line = fstream.readline()
                    #处理line
                    #print(line.strip())
                    pos = fstream.tell()
            fstream.close()
    
    class Resource(object):
        def __init__(self, fileName):
            self.fileName = fileName
            #分块大小
            self.blockSize = 100000000
            self.getFileSize()
        #计算文件大小
        def getFileSize(self):
            fstream = open(self.fileName, 'r')
            fstream.seek(0, os.SEEK_END)
            self.fileSize = fstream.tell()
            fstream.close()
    
    if __name__ == '__main__':
        starttime = time.clock()
        #线程数
        threadNum = 4
        #文件
        fileName = 'IPData.txt';
        res = Resource(fileName)
        threads = []
        #初始化线程
        for i in range(threadNum):
            rdr = Reader(res)
            threads.append(rdr)
        #开始线程
        for i in range(threadNum):
            threads[i].start()
        #结束线程
        for i in range(threadNum):
            threads[i].join()
    
        print(time.clock() - starttime)

     

    转载于:https://my.oschina.net/mickelfeng/blog/812361

    展开全文
  • 主要为大家详细介绍了python多线程分块读取文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 今天小编就为大家分享一篇对Python多线程读写文件加锁的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python多线程文件

    2020-08-26 15:32:09
    from io import open from concurrent.futures import ThreadPoolExecutor,wait,ALL_COMPLETED class read_file(object): def __init__(self): ... print('读取文件开始') executor = ThreadPo
    from io import open
    from concurrent.futures import ThreadPoolExecutor,wait,ALL_COMPLETED
    
    
    class read_file(object):
    
      def __init__(self):
          self.file_count = [1,2]
    
      """
      读文件
      """
      def thread_pool(self):
        print('读取文件开始')
        executor = ThreadPoolExecutor(max_workers=2)
        # 等待线程池所有任务完成
        all_task = [executor.submit(read_file.read_file, self, file_num) for file_num in self.file_count]
        wait(all_task, return_when=ALL_COMPLETED)
        print('读取文件结束')
    
      def read_file(self,file_num):
          txt_name = '/Users/binghanluo/Desktop/test'+str(file_num)+'.txt'
          print('文件名:'+txt_name)
          # 按行读文件
          for line in open(txt_name, 'r'):
              #按行处理
              print(line)
    if __name__ == '__main__':
        ob = read_file()
        ob.thread_pool()
    

    for循环添加任务的时候也可以使用

        for i in range(1,10):
            print(i)
    
    展开全文
  • 主要介绍了Python多线程下的list的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 本文实例讲述了Python多进程分块读取超大文件的方法。分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- import urlparse import datetime...
  • /usr/bin/python # -*- coding: utf-8 -*- import requests import threading import time import Queue import json,urllib2 # 添加线程 创建5个线程名 threadList = ["Thread-1", "Thread-2", "Thread-3", ...
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import requests
    import threading
    import time
    import Queue
    import json,urllib2
    
    # 添加线程  创建5个线程名
    threadList = ["Thread-1", "Thread-2", "Thread-3", "Thread-4", "Thread-5"]
    # 设置队列长度
    workQueue = Queue.Queue(300)
    # 线程池
    threads = []
    start = time.time()
    class myThread(threading.Thread):
        def __init__(self, name, q):
            threading.Thread.__init__(self)
            self.name = name
            self.q = q
    
        def run(self):
            print("Starting " + self.name)
            while True:
                try:
                    crawler(self.name, self.q)
                except:
                    break
            print("Exiting " + self.name)
    
    # 创建新线程
    for tName in threadList:
        thread = myThread(tName, workQueue)
        thread.start()
        threads.append(thread)
    
    
    
    def crawler(threadName, q):
        textmod = {}
        textmod = json.dumps(textmod)
        header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko',
                       "Content-Type": "application/json"}
        
    #执行多线程
    # 从队列里取出数据
        url = q.get(timeout=2)
        try:
            req = urllib2.Request(url=url, data=textmod, headers=header_dict)
            res = urllib2.urlopen(req)
            res = res.read()
            print("index success:" + str(pid) + "      " + res)
        except Exception as e:
            print(q.qsize(), threadName, "Error: ", e)
    
    # 读取数据,放入队列
    count = 0
    filename = 'id.txt'
    f = open(filename, 'r').readlines()
    for id in f:
        pid = id.replace("\"", "").replace("\n", "")
        count = count + 1
        # 生产index
        indexUrl = "https://www.baidu.com"
        url = indexUrl + '/aaa?id=' + pid 
        workQueue.put(url)
    
    # 等待所有线程完成
    for t in threads:
        t.join()
    
    end = time.time()
    print('Queue多线程批量执行时间为:', end - start)
    

    代码非常简单:

    1、配置下需要启动多少个线程,

    2、然后修改读取数据,放入队列那里的文件名和代码,改成自己要执行的代码段。

    3、修改从队列取出数据执行代码,多个线程自己来取数据,

    展开全文
  • python多线程读取列表

    千次阅读 2019-08-07 10:09:46
    本文代码实现了python多线程读取列表,包括python多线程初始化、开始和释放线程锁、分配多线程列表数等内容,可做参考。
  • Python 多线程分块读取文件

    千次阅读 2018-08-14 17:45:31
    什么也不说,直接上代码,绝对看的懂 # _*_coding:utf-8_*_ import time, threading, ConfigParser ...@run方法实现了读文件的操作 ''' class Reader(threading.Thread): def __init__(self,...
  • 主要介绍了python使用多线程查询数据库的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • python多线程分块读文件

    千次阅读 2018-07-17 16:17:59
    实际操作下来发现有问题,读出来的内容总是有些小错误,怀疑不是这么简单,同一个文件的句柄估计多线程同时操作不安全。网上查阅了资料https://blog.csdn.net/lingerlanlan/article/details/...
  • Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端 复制代码 代码如下: #! /usr/bin/env python3 import time import threading import queue # 一个线程,间隔...
  • 今天小编就为大家分享一篇Python 多线程不加锁分块读取文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Python多线程读写文件加锁

    千次阅读 2018-04-26 15:09:15
    Python多线程在io方面比单线程还是有优势,但是在多线程开发时,少不了对文件的读写操作。在管理多个线程对同一文件的读写操作时,就少不了文件锁了。使用fcntl在linux下,python的标准库有现成的文件锁,来自于...
  • python多线程读取同一个文件

    万次阅读 2015-05-13 21:36:05
    python多线程读取同一个文件 多线程读取同一个文件,要求不能重复,不能遗漏。 最开始尝试了一种方法(后来实践证明是无效的) 主线程分配给每个读线程需要读取文件中哪些行, 比如线程1读取1-10行,线程2...
  • python-opencv多线程

    2019-07-05 09:53:58
    在使用opencv处理视频的过程中,...创建一个自定义的帧缓冲区,开启一个线程使用cap函数读取视频帧,将读取到的视频帧存入我们自定义的缓冲区,这个缓冲区可以设计成固定大小,每次新增新的帧进入缓冲区,将挤掉旧的帧
  • Python多线程同步---文件读写控制

    万次阅读 2016-01-28 11:37:23
    1、实现文件读写的文件ltz_schedule_times.py#! /usr/bin/env python #coding=utf-8 import osdef ReadTimes(): res = [] if os.path.exists('schedule_times.txt'): fp = open('schedule_times.txt', 'r')
  • 多线程读取文件: # _*_coding:utf-8_*_ import time, threading, ConfigParser ''' Reader类,继承threading.Thread @__init__方法初始化 @run方法实现了读文件的操作 ''' class Reader(threading.Thread): def ...
  • Python 多线程实例详解

    2020-09-21 09:44:13
    主要介绍了Python 多线程实例详解的相关资料,需要的朋友可以参考下
  • (1)利用python多进程程或多线程实时读取远程IP摄像头视频 (2)Pyhon cv2.VideoWriter 保存视频 整合成如下代码,可以对多路网络摄像头图像实时采集并分别保存视频。或者自己改写代码,直接保存每路的实时图像也...
  • python多线程读取同一个文件哪位大佬还有别的方法分享一个
  • 能根据url的个数快速开启对个线程,单个线程可以实现对同一个url的次访问,返回访问成功或者失败的结果
  • python多线程执行任务,读取文件,批量发请求 #!/usr/bin/python # -*- coding: utf-8 -*- import requests import threading import time import Queue import json,urllib2 # 添加线程 创建5个线程...
  • 一个Python多线程爬虫,在工作时,开10个线程来抓取新浪网页的数据,抓取并保存页面, 并且根据deep返回页面链接,根据key确定是否保存该页面,其中:  deep == 0时,是抓取的最后一层深度,即只抓取并保存页面,不...
  • 主要介绍了Python实现模拟分割大文件多线程处理的方法,涉及Python文件读取、分割及多线程相关操作技巧,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 65,193
精华内容 26,077
关键字:

python多线程读取文件

python 订阅