python 结合redis 队列 做一个例子
结合redis 队列 做了一个例子
#!/usr/bin/env python
# coding: utf-8
# @Time : 2018/12/21 0021 13:57
# @Site :
# @File : demos.py
# @Software: PyCharm
import MySQLdb
import redis
import json
import os, time
import threading
from multiprocessing import Pool, Process
import os, time, random
import sys
reload(sys)
sys.setdefaultencoding('utf8')
class InsertData():
def __init__(self):
# 去掉一些无用信息
self.__list_industry = []
self.__has_many = []
self.__list_xczx = []
self.__list_cxcy = []
self.__list_industry_dict = {'test': self.__list_xczx }
self.__dict_industry = {'test': 212}
self.db = MySQLdb.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", db="ww",
charset='utf8')
redisPool = redis.ConnectionPool(host='localhost', port=6379)
self.re_queue = redis.Redis(connection_pool=redisPool)
self.re_queue2 = redis.Redis(connection_pool=redisPool)
def __get_dict_industry(self):
industry_name = self.__list_industry_dict.keys()
if len(industry_name) == 1:
industry_name = str(tuple(industry_name)).replace(",","")
elif len(industry_name) > 1:
industry_name = str(tuple(industry_name))
else:
return
sql_industry = "select industry_name,industry_id from zzh_industry where industry_name in {}".format(industry_name)
cursor3 = self.db.cursor()
cursor3.execute(sql_industry)
result_list = cursor3.fetchall()
for result in result_list:
self.__dict_industry[result[0]] = result[1]
cursor3.close()
def inser_industry(self):
dta = """xx、xxx"""
data = dta.split("、")
for index, da in enumerate(data):
industry_code = 100001 + index
sqlStr = """insert into xx(industry_name,industry_pid,industry_code,industry_sort,is_lock) VALUES('{industry_name}',211,'{industry_code}',{industry_sort},1) ;""".format(
industry_name=da, industry_code=industry_code, industry_sort=index + 1)
print sqlStr
def put_redis(self):
cursor = self.db.cursor()
item_sql = """SELECT item_title,item_id from xxx"""
cursor.execute(item_sql)
result_list = cursor.fetchall()
num = 1
for result in result_list:
data = {"itemTitle": result[0], "itemId": result[1]}
self.re_queue.lpush("item", json.dumps(data))
num += 1
print ("put over", num)
def get_redis(self):
nums = 1
resultNum = 0
cursor_get = self.db.cursor()
while True:
result = self.re_queue.rpop("item")
if not result:
time.sleep(1)
if resultNum == 10:
break
else:
print "resultNum", resultNum
resultNum += 1
continue
try:
resultNum = 0
result = json.loads(result)
value_list = []
for strkey in self.__list_industry_dict.keys():
if strkey in self.__has_many:
for __strkey in self.__list_industry_dict[strkey]:
if __strkey in result["itemTitle"]:
value_list.append(strkey)
break
if strkey in result["itemTitle"]:
value_list.append(strkey)
value_list = set(value_list)
item_id = result["itemId"]
if value_list:
print result["itemTitle"]
for value in value_list:
nums += 1
# select_sql = "select id from zzh_industry_item where item_id={} and industry_id={} limit 1".format(item_id,self.__dict_industry[value])
# cursor_get.execute(select_sql)
# if cursor_get.fetchone():
# print ("reseat",select_sql)
# continue
sql_insert = "insert into zzh_industry_item(item_id,industry_id)values ({item_id},{industry_id})".format(
item_id=item_id, industry_id=self.__dict_industry[value])
self.re_queue2.lpush("sqls", str(sql_insert))
except Exception as e:
print e
cursor_get.close()
print ("put over")
def test(self):
cursor2 = self.db.cursor()
count = 0
breakNum = 0
num = 0
try:
while True:
sql = self.re_queue2.rpop("sqls")
if sql:
num += 1
breakNum = 0
print sql
try:
cursor2.execute(sql)
if count == 500:
self.db.commit()
count = 0
else:
count += 1
except Exception as e:
print e
if not sql:
time.sleep(1)
if breakNum == 10:
break
else:
print "breakNum", breakNum
breakNum += 1
finally:
print ("insertSql", num)
self.db.commit()
self.db.close()
if __name__ == '__main__':
items = InsertData()
print('Parent process %s.' % os.getpid())
t1 = threading.Thread(target=items.put_redis)
t2 = threading.Thread(target=items.get_redis)
t3 = threading.Thread(target=items.test)
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
python 结合redis 队列 做一个例子的更多相关文章
- python两个队列实现一个栈和两个栈实现一个队列
1.两个栈实现一个队列 两个栈stack1和stack2, push的时候直接push进stack1,pop时需要判断stack1和stack2中的情况.如果stack2不为空的话,直接从stack2 ...
- python爬虫系列:做一个简单的动态代理池
自动 1.设置动态的user agent import urllib.request as ure import urllib.parse as upa import random from bs4 ...
- c#之Redis队列
摘要 这两天一直在考虑redis队列:一个生产者,多个消费者的情况,这里弄了一个demo进行测试. 一个例子 关于如何引用Redisclient 可以参考之前的这篇文章:c#之Redis实践list, ...
- python3 元类编程的一个例子
[引子] 虽然我们可以通过“class”语句来定义“类”,但是要想更加细粒度的控制“类”的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文 ...
- Redis队列跟MQ的区别
Redis队列:Redis队列是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用 ...
- Python自动化 【第十一篇】:Python进阶-RabbitMQ队列/Memcached/Redis
本节内容: RabbitMQ队列 Memcached Redis 1. RabbitMQ 安装 http://www.rabbitmq.com/install-standalone-mac.htm ...
- Python的Flask框架应用调用Redis队列数据的方法
转自:http://www.jb51.net/article/86021.htm 任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器, ...
- 用python做一个搜索引擎(Pylucene)
什么是搜索引擎? 搜索引擎是“对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分”.如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般 ...
- [bigdata] 使用Redis队列来实现与机器无关的Job提交与执行 (python实现)
用例场景: 定时从远程多台机器上下载文件存入HDFS中.一开始采用shell 一对一的方式实现,但对于由于网络或者其他原因造成下载失败的任务无法进行重试,且如果某台agent机器down机,将导致它对 ...
随机推荐
- vue环境配置脚手架搭建,生命周期,钩子
Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...
- Python 简明教程 --- 8,Python 字符串函数
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- St ...
- keras 从txt加载预测数据
ImageDataGenerator.flow_from_directory()的用法已经非常多了,优点是简单方便,但数据量很大时,需要组织目录结构和copy数据,很浪费资源和时间 1. 训练时从tx ...
- CentOS 7 Docker安装部署Go Web
Docker 是一种容器技术,它部署简单,能很好的进行服务隔离,生成镜像,Push到镜像仓库,其他机器一键拉取部署. Docker分为社区版CE和企业版EE,社区版是免费提供给个人和小型团队使用,企业 ...
- css hack原理及常用hack
原理:利用不同浏览器对CSS的支持和解析结果不一样编写针对特定浏览器样式.常见的hack有1)属性hack.2)选择器hack.3)IE条件注释 IE条件注释:适用于[IE5, IE9]常见格式如下 ...
- 前端开发,页面加载速度性能优化,如何提高web页面加载速度
一个网页访问速度的快慢, 不仅看它服务器的配置,这里除去你空间主机配置很烂的情况以外,我们从网站开发方面来探讨,前端技术需要从哪些方面提高访问的速度,需要用到哪些技术手段. 文件的加载 图标的加载: ...
- (二)LVS介绍
LVS分3种模式 (a)NAT(网络地址映射):通过网络地址转换的方法来实现调度 优点:支持所有操作系统及私有网络,且只需一个公网 IP 地址 缺点:用户请求和响应报文都必须 ...
- 确定比赛名次 UDU-1285 + 逃生 UDU 4857 拓扑排序(找不同)
确定比赛名次 题目大意 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得 ...
- plus.runtime.quit()是个好函数
对于H5+APP开发,应用的生命周期监听函数里是对应用行为的监控,但是并不对应用执行退出或重启操作.相关操作还是要使用mui
- 前端开发-css
css: 是给html标签装饰的,变得更好看. 注释: 单行注释:/*注释内容*/ 多行注释:/* 注释内容 注释内容 注释内容 */ 通常我们在写css代码时也会用注释来划分区域(html代码多,同 ...