我正在使用服务器,其配置如下:
RAM - 56GB 处理器 - 2.6 GHz x 16核 如何使用shell进行并行处理?如何利用处理器的所有内核?
我必须从包含数百万条目的文本文件加载数据,例如一个文件包含50万行数据。 我使用django python脚本在postgresql数据库中加载数据。 但是,即使我有这么好的配置,在数据库中添加数据也需要很多时间。服务器,但我不知道如何并行使用服务器资源,以便处理数据所需的时间更少。 昨天我只从文本文件到postgresql加载了15000行数据,花了近12个小时来完成它。 我的django python脚本如下:
import re
import collections
def SystemType():
filename = raw_input("Enter file Name:")
in_file = file(filename,"r")
out_file = file("SystemType.txt","w+")
for line in in_file:
line = line.decode("unicode_escape")
line = line.encode("ascii","ignore")
values = line.split("\t")
if values[1]:
for list in values[1].strip("wordnetyagowikicategory"):
out_file.write(re.sub("[^\ a-zA-Z()<>\n""]"," ",list))
# Eliminate Duplicate Entries from extracted data using regular expression
def FSystemType():
lines_seen = set()
outfile = open("Output.txt","w+")
infile = open("SystemType.txt","r+")
for line in infile:
if line not in lines_seen:
l = line.lstrip()
# Below reg exp is used to handle Camel Case.
outfile.write(re.sub(r'((?<=[a-z])[A-Z]|(?<!\A)[A-Z](?=[a-z]))', r' \1', l).lower())
lines_seen.add(line)
infile.close()
outfile.close()
sylist=[]
def create_system_type(stname):
syslist=Systemtype.objects.all()
for i in syslist:
sylist.append(str(i.title))
if not stname in sylist:
slu=slugify(stname)
st=Systemtype()
st.title=stname
st.slug=slu
# st.sites=Site.objects.all()[0]
st.save()
print "one ST added."
答案 0 :(得分:0)
如果你可以在没有代码的情况下表达你的要求(不是每个shell程序员都能真正阅读phython),我们可以在这里提供帮助。
e.g。您的15000行12小时的报告表明您在某处有一个太忙的“for”循环,我建议嵌套
for list in values[1]....
你试图剥夺什么?个性,整言? ...
然后我建议“awk”。
答案 1 :(得分:0)
如果能够计算出Django所需的精确数据结构,则可以使用psql "copy"命令直接加载数据库表。您可以通过准备加载到db中的csv文件来完成此操作。
使用您的方法加载速度慢的原因有很多。首先,Django有很多事务开销。其次,您不清楚运行Django代码的方式是什么 - 这是通过内部测试服务器吗?如果是这样,你可能不得不处理它的缓慢。最后,什么使得快速数据库通常与CPU无关,而是快速IO和大量内存。