我正在尝试创建随机实数、整数、字母数字、字母字符串,然后写入文件直到文件大小达到10MB.
代码如下。
import string
import random
import time
import sys
class Generator():
def __init__(self):
self.generate_alphabetical_strings()
self.generate_integers()
self.generate_alphanumeric()
self.generate_real_numbers()
def generate_alphabetical_strings(self):
return ''.join(random.choice(string.ascii_lowercase) for i in range(12))
def generate_integers(self):
return ''.join(random.choice(string.digits) for i in range(12))
def generate_alphanumeric(self):
return ''.join(random.choice(self.generate_alphabetical_strings() +
self.generate_integers()) for i in range(12))
def _insert_dot(self, string, index):
return string[:index].__add__('.').__add__(string[index:])
def generate_real_numbers(self):
rand_int_string = ''.join(random.choice(self.generate_integers()) for i in range(12))
return self._insert_dot(rand_int_string, random.randint(0, 11))
from time import process_time
import os
a = Generator()
t = process_time()
inp = open("test.txt", "w")
lt = 10 * 1000 * 1000
count = 0
while count <= lt:
inp.write(a.generate_alphanumeric())
count += 39
inp.close()
elapsed_time = process_time() - t
print(elapsed_time)
需要大约225.953125 秒去完成。我怎样才能提高这个程序的速度?请提供一些代码见解?
观察到“缓慢”的两个主要原因:
- 你的 while 循环很慢,它有大约一百万次迭代。
- 您没有正确使用 I/O 缓冲。不要进行那么多系统调用。目前,您正在拨打
write()
大约一百万次。
首先在 Python 数据结构中创建数据并调用write()
only once.
这更快:
t0 = time.time()
open("bla.txt", "wb").write(''.join(random.choice(string.ascii_lowercase) for i in xrange(10**7)))
d = time.time() - t0
print "duration: %.2f s." % d
Output: duration: 7.30 s.
现在程序大部分时间都花在生成数据上,即random
东西。你可以很容易地看到,通过替换random.choice(string.ascii_lowercase)
例如"a"
。然后在我的机器上测量的时间下降到一秒以下。
如果您想更接近地了解机器写入磁盘时的实际速度,请在将数据写入磁盘之前使用 Python 最快(?)的方法来生成较大的数据:
>>> t0=time.time(); chunk="a"*10**7; open("bla.txt", "wb").write(chunk); d=time.time()-t0; print "duration: %.2f s." % d
duration: 0.02 s.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)