结合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 队列 做一个例子的更多相关文章

  1. python两个队列实现一个栈和两个栈实现一个队列

    1.两个栈实现一个队列 两个栈stack1和stack2, push的时候直接push进stack1,pop时需要判断stack1和stack2中的情况.如果stack2不为空的话,直接从stack2 ...

  2. python爬虫系列:做一个简单的动态代理池

    自动 1.设置动态的user agent import urllib.request as ure import urllib.parse as upa import random from bs4 ...

  3. c#之Redis队列

    摘要 这两天一直在考虑redis队列:一个生产者,多个消费者的情况,这里弄了一个demo进行测试. 一个例子 关于如何引用Redisclient 可以参考之前的这篇文章:c#之Redis实践list, ...

  4. python3 元类编程的一个例子

    [引子] 虽然我们可以通过“class”语句来定义“类”,但是要想更加细粒度的控制“类”的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文 ...

  5. Redis队列跟MQ的区别

    Redis队列:Redis队列是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用 ...

  6. Python自动化 【第十一篇】:Python进阶-RabbitMQ队列/Memcached/Redis

     本节内容: RabbitMQ队列 Memcached Redis 1.  RabbitMQ 安装 http://www.rabbitmq.com/install-standalone-mac.htm ...

  7. Python的Flask框架应用调用Redis队列数据的方法

    转自:http://www.jb51.net/article/86021.htm 任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器, ...

  8. 用python做一个搜索引擎(Pylucene)

    什么是搜索引擎? 搜索引擎是“对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分”.如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般 ...

  9. [bigdata] 使用Redis队列来实现与机器无关的Job提交与执行 (python实现)

    用例场景: 定时从远程多台机器上下载文件存入HDFS中.一开始采用shell 一对一的方式实现,但对于由于网络或者其他原因造成下载失败的任务无法进行重试,且如果某台agent机器down机,将导致它对 ...

随机推荐

  1. jni不通过线程c回调java的函数

    整个工程的项目如下: 1.项目的思路是在activity中启动MyService这个服务,在服务中调用 JniScsManger类中的本地方法startNativeScsService,在 start ...

  2. IntelliJ IDEA 2018.3.6 安装、激活 JRebel

    在 IntelliJ IDEA 2018.3.6 中安装## JRebel 1.代开 IDEA 开发工具,然后用快捷键 Ctrl+Alt+S 打开设置并搜索 jrebel 插件 2.安装 jrebel ...

  3. 动态追踪技术之SystemTap

    SystemTap SystemTap是一个深入检查Linux系统活动的工具,使用该工具编写一些简单的代码就可以轻松的提取应用或内核的运行数据,以诊断复杂的性能或者功能问题.有了它,开发者不再需要重编 ...

  4. python高阶-Linux基础命令集

    声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 1: 查看文件信息:ls ls常用参数: 参数 含义 -a 显示指定目录下所有子目录与文件,包括隐藏文件 -l 以 ...

  5. Spring FactoryBean 缓存

    相关文章 Spring 整体架构 编译Spring5.2.0源码 Spring-资源加载 Spring 容器的初始化 Spring-AliasRegistry Spring 获取单例流程(一) Spr ...

  6. MySQL 8.0 主从同步

    一.简介 一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中.MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器 ...

  7. HotSpot二分模型(1)

    HotSpot采用了OOP-Klass模型来描述Java类和对象.OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象的具体类型. 那么为何要设计这样一 ...

  8. css hack原理及常用hack

    原理:利用不同浏览器对CSS的支持和解析结果不一样编写针对特定浏览器样式.常见的hack有1)属性hack.2)选择器hack.3)IE条件注释 IE条件注释:适用于[IE5, IE9]常见格式如下 ...

  9. web前端图片加载优化,从图片模糊到清晰的实现过程

    在网页图片显示的时候,会发现许多网站采用了先模糊,然后在慢慢清晰的过程,这样的加载用户体验是比较好的,那么如何实现呐? 默认加载2张图片,一张缩略图,一张原图,当打开网页的时候默认只显示缩略图,然后我 ...

  10. 「疫期集训day13」雾天

    我们千里迢迢赶来这里支援协约国----与德军正面交锋的美国士兵 今天考试签到题都没A,失误重大,T1几周前做过的拓扑排序板子都没写,T2失误在没敢调试,对自己信心不足,30分钟写了个DP,几分钟没调出 ...