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机,将导致它对 ...
随机推荐
- SSH网上商城三
现在我们要实现下面的需求: 当用户点击左侧二级菜单选项的时候,在右侧要显示对应的该二级菜单项下面存在哪些商品,例如点击潮流女装,要在右侧分页显示该潮流女装下对应哪些商品 1.要分页显示 首先要获得该二 ...
- appium安装的permission deny处理方法-20200204
npm -v 报错:Error: EPERM: operation not permitted, mkdir 'C:\soft\nodejs' 起因:原本安装node在C盘soft文件夹下,按node ...
- 作为一个Java开发你用过Jib吗
1. 前言 Jib是Google开发的可以直接构建 Java应用的Docker和OCI镜像的类库,以Maven和Gradle插件形式提供.它最骚操作的是可以在没有Docker守护程序的情况下构建,也就 ...
- Springboot--元注解及自定义注解(表单验证)
本文简单说明一下元注解,然后对元注解中的@Retention做深入的讨论,在文章最后使用元注解写一个自定义注解来结尾. 一.结论: @Target:注解的作用目标 @Target(ElementTyp ...
- linux版本百度网盘只能登录一次的解决方法
rm -rf ~/baidunetdisk 重新启动百度网盘,解决-
- springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI ...
- Linux服务搭之 - 消息队列(RabbitMQ)
本章主要目的是为了后续spring-cloud-bus做准备,讲述在Linux Centos7操作系统中搭建 RabbitMQ… - 什么是RabbitMQ RabbitMQ 是一个使用 Erlang ...
- js中取el表达式问题
例如常用的${pageContext.request.contextPath} 如果需要在js中用到 分两种情况: 如果js是直接写在jsp中 可以直接写el表达式 例如: 如果js是写在外部,jsp ...
- redis.cluster/memcached.cluster/wmware esxi
1. 安装配置redis的cluster 集群 redis 集群高可用 实验环境 192.168.198.131 openvpn-server #42-Ubuntu SMP Mon Jun 8 14: ...
- LeetCode 第 196 场周赛 (题目:5452-5455,这是参加过最坑的周赛,暴力n^2居然可以过)
5452. 判断能否形成等差数列 给你一个数字数组 arr . 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 . 如果可以重新排列数组形成等差数列,请返回 tru ...