并行进程怎么使用?
 import os
import sys
import time def processFunc(i):
time.sleep(10-i)
print i if __name__=='__main__':
from multiprocessing import Pool pool=Pool() for i in range(0,10):
print i print '----------------split line-----------------' for i in range(0,10):
pool.apply_async(processFunc,args=(i,)) print 'waiting multi processes complete...'
pool.close()
pool.join() s = raw_input("please press enter key to exit...")
print s

怎么确定我们使用的是多进程呢?

实现批量入库:

import os
import sys
import pymssql server="172.21.111.222"
user="Nuser"
password="NDb"
database="iNek_TestWithPython" def connectonSqlServer():
conn=pymssql.connect(server,user,password,database)
cursor=conn.cursor()
cursor.execute("""select getdate()""")
row=cursor.fetchone()
while row:
print("sqlserver version:%s"%(row[0]))
row=cursor.fetchone() conn.close() def getCreateTableScript(enodebid):
script="""IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[rFile{0}]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[rFile{0}](
[OID] [bigint] IDENTITY(1,1) NOT NULL,
[TimeStamp] [datetime] NULL,
[rTime] [datetime] NOT NULL,
[bTime] [datetime] NOT NULL,
[eTim] [datetime] NOT NULL,
[rid] [int] NOT NULL,
[s] [int] NOT NULL,
[c] [int] NOT NULL,
[muid] [decimal](18, 2) NULL,
[lsa] [decimal](18, 2) NULL,
[lsrip] [int] NULL,
[lcOID] [int] NULL,
[lcrq] [decimal](18, 2) NULL,
[gc2c1] [int] NULL,
[tdcCP] [decimal](18, 2) NULL,
...
...
CONSTRAINT [PK_rFile{0}] PRIMARY KEY NONCLUSTERED
(
[OID] ASC,
[rTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PS_OnrTime]([rTime])
) ON [PS_OnrTime]([rTime])
END IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[rFile{0}]') AND name = N'IX_rFile_c{0}') BEGIN
CREATE NONCLUSTERED INDEX [IX_rFile_c{0}] ON [dbo].[rFile{0}] ([c] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
End
...
...
""".format(enodebid)
return script def getBulkInsertScript(enodebid,csvFilePath,formatFilePath):
script="""BULK INSERT [dbo].[rFile{0}]
FROM '{1}'
WITH
(
BATCHSIZE=10000,
FIELDTERMINATOR='\\t',
ROWTERMINATOR ='\\r\\n',
FORMATFILE ='{2}'
)""".format(enodebid,csvFilePath,formatFilePath)
return script def batchInsertToDB(enodebid,filePath):
from time import time
start=time()
fileExt=os.path.splitext(filePath)[1]
#print fileExt
if os.path.isfile(filePath) and (fileExt=='.gz' or fileExt=='.zip' or fileExt=='.xml' or fileExt==".csv"):
# 1)create table with index
conn=pymssql.connect(server,user,password,database)
cursor=conn.cursor()
cursor.execute(getCreateTableScript(enodebid))
conn.commit()
# 2)load csv file to db
cursor.execute(getBulkInsertScript(enodebid=enodebid,csvFilePath=filePath,formatFilePath="D:\\python_program\\rFileTableFormat.xml"))
conn.commit()
conn.close()
end=time()
print 'file:%s |size:%0.2fMB |timeuse:%0.1fs' % (os.path.basename(filePath),os.path.getsize(filePath)/1024/1024,end-start) if __name__=="__main__":
from time import time
#it's mutilple pro2cess not mutilple thread.
from multiprocessing import Pool start=time()
pool=Pool() rootDir="D:\\python_program\\csv"
for dirName in os.listdir(rootDir):
for fileName in os.listdir(rootDir+'\\'+dirName):
pool.apply_async(batchInsertToDB,args=(dirName,rootDir+'\\'+dirName+'\\'+fileName,))
#single pool apply
#batchInsertToDB(dirName,rootDir+'\\'+dirName+'\\'+fileName) print 'Waiting for all subprocesses done.....'
pool.close()
pool.join()
end=time()
print 'use time: %.1fs' %(end-start)

测试环境:

2.22服务器,CPU:E54620,Memory:64,磁盘SAS/万转以上。

测试速度:41分钟,处理200个ENB,一共4749个csv文件,一共19.1G,入库记录1 1491 1843条记录,每条记录30个字段左右,平均每秒入库46712条记录(每条记录32列)。

Python是8个进程运行。

监控图:

平均数据库日志文件写入速度:70M/S

平均数据库      文件写入速度:30M/S~40M/S

.net 并行多进程操作:

-- 2016-08-02 00:06:19.567 2016-08-01 23:37:14.067
-- 16parallel task :10s/enb
-- 2016-08-02 00:29:42.083 2016-08-02 00:09:29.297
-- 8 parallel task : 7s/enb
select (20*60+13)/160

Python:使用pymssql批量插入csv文件到数据库测试的更多相关文章

  1. python脚本-excel批量转换为csv文件

    pandas和SQL数据分析实战视频教程 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2& ...

  2. C# ASP.NET CSV文件导入数据库

    原文:C# ASP.NET CSV文件导入数据库 using System; using System.Collections.Generic; using System.Text; using Sy ...

  3. Java使用iBatis批量插入数据到Oracle数据库

    Java使用iBatis批量插入数据到Oracle数据库 因为我们的数据跨库(mysql,oracle),单独取数据的话需要遍历好多遍,所以就想着先从mysql数据库中取出来的数据然后在oracle数 ...

  4. 基于CentOS的MySQL学习补充四--使用Shell批量从CSV文件里插入数据到数据表

    本文出处:http://blog.csdn.net/u012377333/article/details/47022699 从上面的几篇文章中,能够知道怎样使用Shell创建数据库.使用Shell创建 ...

  5. Linux 用 shell 脚本 批量 导入 csv 文件 到 mysql 数据库

    前提: 每个csv文件第一行为字段名 创建的数据库字段名同csv 文件的字段名 1. 批量导入 多个 csv 文件 for file in ./*.csv;do mv $file tablename. ...

  6. python之读取和写入csv文件

    写入csv文件源码: #输出数据写入CSV文件 import csv data = [ ("Mike", "male", 24), ("Lee&quo ...

  7. 将文件夹下的所有csv文件存入数据库

    # 股票的多因子分层回测代码实现 import os import pymysql # import datetime, time # from config import * database_ta ...

  8. 将csv文件读入数据库

      USE LHJTest create table #temp6//创建临时表 ( A nvarchar(max) NOT NULL, B nvarchar(max), C nvarchar(max ...

  9. Android 批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

随机推荐

  1. javascript Array类

    Array类 toString()方法和valueOf()方法,返回特殊的字符串.该字符串是通过对每项调用toString()方法,然后用逗号把它们连接在一起构成的.例如,对具有项"red& ...

  2. PIVOT 用于将列值旋转为列名

    PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )A ...

  3. JS中基本window对象操作

    ---恢复内容开始--- 一.使用window中的属性时   window.属性,直接跟属性名.而调用window的函数时  window.hanshu(): 要在其函数名后面加括号. 二.windo ...

  4. MySQL主从架构之Master-Master互为主备

    前言 通常,为了简化逻辑,master会设置为只读,正常只通过slave进行读写. 若要两边都写,为了避免自增id冲突,一般会设置奇偶错开,即一台的自增ID均为奇数,另一台均为偶数. 基本原理 首先, ...

  5. php session 跨页失效问题

    原因是session.savepath 目录不存在或者没有读写权限

  6. Java 基本数据类型转换

    1. Integer/int  转 String Integer a = 1; (int a = 1) String b = Integer.toString(a); 2. float 转 Strin ...

  7. 【No.1】监控Linux性能25个命令行工具

    如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?通过以下命令或者工具可以快速定位 top vmstat lsof tcpdump netsta ...

  8. LogNet4学习笔记

    LogNet是一套开源的程序日志记录系统,经过配置后可以自动抓取程序中的错误.异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键.写入数据库等. 这里写个AspNet应用L ...

  9. nsenter into docker. selinux(semanage,restorecon)

    Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH.如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可.当我启动了五个容器后,每个容器默认是没有配置SS ...

  10. 欢迎大家提问Android技术及职业生涯等问题

    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 最近有些时间,但QQ群问的问题比较多,不能一一解答,如果有价值 ...