尝试在具有以下配置的盒子上生成十亿行随机数据,仅此盒子上正在运行数据创建。 仅查找有关可以使用哪些方法来提高性能的说明。
Running : Python 2.7
OS : RHEL 7.5
processor : 1 to 15
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
stepping : 1
microcode : 0xb00002a
cpu MHz : 2300.268
cache size : 46080 KB
physical id : 0
siblings : 16
core id : 7
cpu cores : 8
代码:
import random
from datetime import date
import csv
import collections
from multiprocessing import Process
from datetime import datetime as dt
from datetime import timedelta
recordCount = 100000
start_date="2017-01-01"
end_date="2017-03-31"
file1 = csv.writer(open('file1.csv', "wb"), quoting=csv.QUOTE_ALL)
file2 = csv.writer(open('file2.csv', "wb"), quoting=csv.QUOTE_ALL)
file3 = csv.writer(open('file3.csv', "wb"), quoting=csv.QUOTE_ALL)
weekend = set([5, 6])
for i in range(1, recordCount):
for date in daterange(start_dt, end_dt):
if date.weekday() not in weekend:
for i in range(1, random.randrange(5, 9)):
file1.writerow(rand_amt())
file2.writerow(rand_amt())
file3.writerow(rand_amt())
def rand_amt():
amt_1 = random.randrange(0, 10000)
amt_2 = random.randrange(0, 10000)
amt_3 = random.randrange(0, 1000)
amt_4 = random.randrange(0, 100)
return amt_1, amt_2, amt_3, amt_4
def daterange(start_date, end_date):
for n in range(int((end_date - start_date).days)):
yield start_date + timedelta(n)
INFO程序花费了--44906.657975秒---
上面的代码需要大约13个小时的四分之一,我认为这是由于嵌套的迭代。
**我尝试了**
- 创建列表并追加到列表中,而不是为每个记录编写。某些迭代完成后再写,但是我在这里没有看到很多改进。运行1000条记录后,我看到了1秒的改进。
- 尝试过多线程/多处理,看来我并不完全了解它们之间的区别。仍在尝试。
- 试图将它们分成几个月/季度,但是要花太多的精力来跟踪过程和连接文件。
使用Python处理此类问题的最佳方法是什么?有没有办法提高性能?
还是应该在其他地方寻找?
要求是每天生成1000万个维记录,并且每个维记录在事实表中应具有5-8个记录。理想情况下,一次迭代中必须有3个事实,每个5-8 Rec,并且它们应该具有随机值。