python 读取mysql大量数据处理_python使用多线程快速把大量mysql数据导入elasticsearch...

使用python多线程,运行时自定义线程数,自动计算每个线程处理的数据量,连接mysql读取数据,处理成需要的字段入到elasticsearch。

运行效果图:

10个线程 运行会在这里实时刷新,方便查看每个线程处理到的id数:[root@localhost shw]# python put_album.py

{"0": "2105success ", "1": "196723success ", "2": "392557null", "3": "587819null", "4": "782519null", "5": "977482null", "6": "1172186null", "7": "1366897null", "8": "1561614null", "9": "1754368success "} "}

代码如下:#!/usr/bin/python

#coding:utf-8

import requests,re,os,time,urllib,urllib2,random

import json,MySQLdb,sys,math,threading

reload(sys)

sys.setdefaultencoding('utf-8')

ES_CFG = {"host":"127.0.0.1","port":"9200","user":"elastic","password":"123456","index_name":"es_album","doc":"zhuanji"}

ES_OBJ = {}

ES_OBJ['album_url'] = "http://"+ES_CFG['host']+":"+str(ES_CFG['port']+"/"+ES_CFG['index_name']+'/'+ES_CFG['doc'])

MSG = {}

#数据库连接对象

def db_obj():

return MySQLdb.connect('127.0.0.1','root','123456','dbname',port=3308,charset="utf8")

def api_post(url,data):

jdata_str = json.dumps(data)

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko',"Content-Type": "application/json"}

#print http_post('http://www.xxxx.com/api_pnews',jdata_str)

res = requests.post(url,data=jdata_str,auth=(ES_CFG['user'],ES_CFG['password']),headers=headers)

res.close()

return res

def strip_tags(html):

if html == None:

return '';

try:

dr = re.compile(r']+)>',re.S)

html = dr.sub('',html)

html = re.sub(r'[\n]+',r'', html, flags=re.S)

return html.strip()

except Exception as e:

print e

print html

exit(0)

def pretreat(html):

#"去标签"

str_txt=strip_tags(html)

str_txt = re.sub('\n|\t','',str_txt)

str_txt = re.sub('"','',str_txt)

str_txt = re.sub("'",'',str_txt)

str_txt = re.sub(' ','',str_txt)

str_txt = re.sub("\xa0",'',str_txt)

str_txt = re.sub("\u3000",'',str_txt)

return str_txt

def create_index(start,end,msg_id):

db = db_obj()

url = ES_OBJ['album_url']

for i in range(start,end):

time.sleep(0.01)

cur = db.cursor()

sql = "select id,name,keywords,desption from shwcms_album where id = %s"%i;

cur.execute(sql)

result = cur.fetchone()

if result != None:

data = {}

data['itemid'] = result[0]

data['album_name']=pretreat(result[1])

data['keywords']=pretreat(result[2])

data['desption']=pretreat(result[3])

res = api_post(url,data)

#print json.dumps(data)

if res != None:

MSG[msg_id] = (str(i)+'success ')

else:

MSG[msg_id] = str(i)+"fail"

else:

MSG[msg_id] = str(i)+"null"

db.close()

max_threading = 10 #定义100个线程

max_id = 1947072 #最大值

start_id = 1 #起始值

size = int(math.ceil((max_id-start_id+1)/max_threading))

#print size

for i in range(0,max_threading):

MSG[i] = "";

threading.Thread(target=create_index,args=(i*size,(i+1)*size,i)).start()

while True:

sys.stdout.write("\r %s" %json.dumps(MSG))

sys.stdout.flush()

time.sleep(1)

非特殊说明,本博所有文章均为博主原创。

最新文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java web redis_java web redis使用(二)

上篇中已经安装好redis,然后下面就说怎么在java web中用客户端来使用regis使用jedis java客户端一:一个简单的示例代码:public static void main(String[] args) {Jedis jedis new Jedis( "147.151.240.234" , 6379 );jedis.set("foo&…

mysql 主从_搭建mysql主从并编写监控主从状态脚本

要求:两台centos7虚拟机分为主和从安装mysqlyum -y install mysql mysql-server关闭防火墙service iptables stopsetenforce 0上面的主从都做。修改主的配置文件vi /etc/my.cnf#添加server-id1log-binmysqlbinrelay-logrelays之后保存退出重启mysql服务service …

Ubuntu Sublime Text 3 搜狗拼音

已知前置条件 本经验目前在Ubuntu14.04环境下&#xff0c;已有搜狗输入法 for Linux和Sublime Text 3的情况下安装成功。 解决方法步骤 保存下面的代码到文件sublime_imfix.c(位于~目录) #include <gtk/gtkimcontext.h> void gtk_im_context_set_client_window (GtkIMCon…

Java核心技术点之动态代理

本篇博文会从代理的概念出发&#xff0c;介绍Java中动态代理技术的使用&#xff0c;并进一步探索它的实现原理。由于个人水平有限&#xff0c;叙述中难免出现不清晰或是不准确的地方&#xff0c;希望大家可以指正&#xff0c;谢谢大家&#xff1a;&#xff09; 一、概述 1. 什么…

pythonwebview自动化测试_GitHub - githubwzg/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS...

0910 UPDATE新增控件集参数化&#xff0c;相同测试步骤的Android/iOS可共用一份测试用例不同测试步骤的用例还需要单独写0904 UPDATE优化Android log及crsahinfo相关输出路径新增iOS crashreport解析新增内容&#xff1a;适配iOS提取android crash信息优化report(增加自动填充包…

linux中使用lftp上传下载文件

lftp是linux中一款ftp服务器相比windows中的ftp显得要复杂不少了&#xff0c;下面我来总结一下lftp文件上传&#xff0c;文件下载&#xff0c;及文件查找等等相关命令吧。 lftp连接的几种方法&#xff0c;最常用的是lftp namesite&#xff0c;这样可以不用明文输入密码。 1、lf…

java 数据库 事务 只读_不使用事务和使用只读事务的区别

转转转&#xff0c;&#xff0c;还需要具体验证(决定把readonly类型的事务完全去掉&#xff0c;以提高性能&#xff0c;这里有讨论&#xff1a;http://stackoverflow.com/questions/2562865/spring-transaction-readonly)。。。如果只提交一个查询&#xff0c;有必要用事务吗&a…

python搭建webapi_怎么搭建Web Api

1.通常我们有个web 让后可以有个web api 提供接口2.通常我们分别建两个项目 web api 依赖web的来进行访问(说到底是依赖是IIS)3.我们先建个SmallCode.Test.Web 再建一个SmallCode.Test.Api4.直接在SmallCode.Test.Web 引用 SamllCode.Test.Api 运行通过地址 /api/Order 无法访问…

shell入门之expr的使用

在expr中加减乘除的使用&#xff0c;脚本例如以下&#xff1a; #!/bin/sh #a test about expr v1expr 5 6 echo "$v1" echo expr 3 5 echo expr 6 / 2 echo expr 9 \* 5 echo expr 9 - 6 执行效果 转载于:https://www.cnblogs.com/bhlsheji/p/5401458.html

java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...

之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息&#xff0c;然后在主线程(UI线程)中获取消息并修改UI&#xff0c;那么可以不可以在由主线程发送消息&#xff0c;子线程接收呢&#xff1f;我们按照之前的思路写一下代码&#xff1a;packagecn.lixyz.handlertest;…

java开源笔记软件下载_开发常用软件笔记 - ZhaoQian's Blog - OSCHINA - 中文开源技术交流社区...

notepad使用快捷键CtrlH打开“替换对话框”&#xff0c;在每行的开头添加内容。 勾选左下角的“正则表达式”选项 在“查找目标”里输入上尖号“^”&#xff0c;上尖号代表每行的开头 在“替换为”里输入“private String”。然后点"全部替换"按钮&#xff0c;这样每…

python示例apk_Python获取apk文件URL地址实例

工作中经常需要提取apk文件的特定URL地址&#xff0c;如是想到用Python脚本进行自动处理。需要用到的Python基础知识如下:os.walk()函数声明&#xff1a;os.walk(top,topdownTrue,οnerrοrNone)(1)参数top表示需要遍历的顶级目录的路径。(2)参数topdown的默认值是“True”表示…

使用静态工厂方法而不是构造器

注意&#xff1a;静态工厂方法不是设计模式中的工厂方法。 一个类向客户端提供静态工厂方法有如下好处&#xff1a; 有名称&#xff0c;不用根据参数类型和顺序区分重载方法&#xff0c;让代码更易读 是否每次调用都需要新对象是可控制的&#xff0c;对于不可修改的对象可以采取…

极光推送指定用户推送_App用户都睡着了?是时候用推送和活动唤醒一波了!

想要运营好一款App&#xff0c;引流、留存、促活三大环节必不可少。引流解决了用户来的问题&#xff0c;留存解决了用户留下来的问题&#xff0c;而促活解决的是让一部分新注册用户以及许久没有动静的老用户&#xff0c;在平台中再次活跃起来。今天&#xff0c;我们就来聊聊关于…

扫描sdcard文件(递归)

private void saoMiaoSdCard() {// TODO Auto-generated method stub// 判断是否挂载if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// 获取sdcardFile sdcard Environment.getExternalStorageDirectory();// 创建集合对象list_file new A…

oracle awr报告生成_分享AWR报告的生成和简单分析方法

生成AWR报告方法&#xff1a;第一步&#xff1a;数据库压力测试卡开始时&#xff1a;生成第一个快照&#xff1a;Sql>exec dbms_workload_repository.create_snapshot();第二步&#xff1a;数据库压力测试结束时&#xff1a;生成第二个快照Sql>exec dbms_workload_reposi…

java date.from_java datefromat

DateFormat 中的格式一致 即可) java.text.SimpleDateFormat sdf new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java); java.......SimpleDateFormat常用法_计算机软件及应用_IT/计算机_专业资料。有关javaSInpleDateFormat类的常用操作 1. SimpleDateFo…

selenium打开Firefox、IE、Chrome浏览器【python】

selenium打开不同浏览器的脚本。 1.Firefox from selenium import webdriverdriverwebdriver.Firefox() driver.get("http://www.baidu.com") 这里要注意打开的域名一定要加前http:// 否则会报错&#xff1a;selenium.common.exceptions.WebDriverException: Messag…

安卓开发 登录用户信息缓存_在Linux上使用finger命令查询登录用户信息

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言本文主要讲解finger命令的作用和日常使用案例。finger命令是一个用户信息查询命令&#xff0c;它给出了所有登录用户的详细信息。…

java后端传object给js_【JSON】JSON在前端和后端传递

前后台最最传统的交互方式就是表单交互&#xff0c;然后用request.setAttribute方法设置结果&#xff0c;渲染jsp&#xff0c;然而随着前台界面的复杂程度的提高&#xff0c;或者是使用了某些前端框架(sigmagrid)越来越多的界面会使用异步方式提交数据。那么这个过程大致是什么…