使用yield處理檔案

2022-03-13 07:09:14 字數 1177 閱讀 2016

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

import random

import threading

import string

import time

t1 = time.time()

def write(x):

with open('a.txt','a+')as a:

a.write(x + '||')

def run():

for x in range(10000000):

strs = str(random.randint(1000,2000)) +random.choice(string.ascii_letters)*10

write(strs)

for x in range(10):

t = threading.thread(target=run)

t.start()

t2 = time.time()

print(t2 - t1)

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

def readbooks(f, newline):

# f為傳入的檔名,newline為分隔符

buf = ""

# 快取,處理已經讀出來的資料量

while 1:

while newline in buf:

# 快取中的資料是否存在分隔符

pos = buf.index(newline)

# 如果存在就找到字元的位置,比如0或者1或者2

yield buf[:pos]

# 暫停函式,返回快取中的從頭到字元的位置

buf = buf[pos + len(newline):]

# 快取變成了,字元的位置到末尾

chunk = f.read(2010 * 10)

# 讀取2010*10的字元

if not chunk:

# 已經讀取到了檔案結尾

yield buf

break

buf += chunk

# 加到快取

with open('a.txt','r')as f:

for line in readbooks(f,'||'):

print(line)

如何使用PHP的生成器yield處理大量資料業務

官方解釋yield yield生成器是php5.5之後出現的,官方文件這樣解釋 yield提供了一種更容易的方法來實現簡單的迭代物件,相比較定義類實現 iterator 介面的方式,效能開銷和複雜性大大降低。生成器的核心是乙個yield關鍵字,乙個生成器函式看起來像乙個普通的函式,不同的是 普通函式...

C 中的 yield 使用

yield是c 為了簡化遍歷操作實現的語法糖,我們知道如果要要某個型別支援遍歷就必須要實現系統介面ienumerable,這個介面後續實現比較繁瑣要寫一大堆 才能支援真正的遍歷功能。舉例說明 using system using system.collections.generic using sy...

yield迭代器的使用

class program foreach var item in query console.writeline 未使用迭代器 end foreach var item in query console.writeline 使用迭代器 end console.readkey public stat...