0

我正在使用配置如下的服务器:

RAM - 56GB 处理器 - 2.6 GHz x 16 核 如何使用 shell 进行并行处理?如何利用处理器的所有内核?

我必须从包含数百万个条目的文本文件中加载数据,例如一个文件包含 50 万行数据。我正在使用 django python 脚本在 postgresql 数据库中加载数据。但是即使我有这么好的配置,在数据库中添加数据也需要很多时间。服务器,但我不知道如何并行利用服务器资源,以减少处理数据的时间。昨天我只从文本文件加载了 15000 行数据到 postgresql,花了将近 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."
4

2 回答 2

0

if you could express your requirements without the code (not every shell programmer can really read phython), possibly we could help here.

e.g. your report of 12 hours for 15000 lines suggests you have a too-busy "for" loop somewhere, and i'd suggest the nested for

for list in values[1]....

what are you trying to strip? individual characters, whole words? ...

then i'd suggest "awk".

于 2013-06-20T11:45:07.257 回答
0

如果您能够计算出 Django 所需的精确数据结构,则可以使用 psql “复制”命令直接加载数据库表。您可以通过准备一个 csv 文件加载到数据库中来做到这一点。

使用您的方法加载缓慢的原因有很多。首先,Django 有很多事务开销。其次,不清楚您以何种方式运行 Django 代码——这是通过内部测试服务器吗?如果是这样,您可能必须处理它的缓慢性。最后,快速数据库通常与 CPU 无关,而是与快速 IO 和大量内存有关。

于 2013-06-25T17:49:28.877 回答