结合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. 腾讯IEG--2020春招实习

    笔试 正常批就五道编程题,可以跳出使用本地IDE,题目很好理解,基本都能写出来,但是要过全部用例不容易.具体题目和题解可以看看这位大佬的牛客帖子,我的就不献丑了,有两题都只过了40%,我当时是用C#做 ...

  2. 计算机网络之ARP协议

    ARP ARP(Address Resolution Protocol),即地址解析协议,是根据IP地址解析物理地址的一个TCP/IP协议.主机将包含目标IP地址信息的ARP请求广播到网络中的所有主机 ...

  3. Web安全之验证码绕过

    一,验证码绕过(on client) 首先让burpsuite处于抓包状态,打开pikachu的验证码绕过(on client)随意输入账号和密码,验证码先不输入,点击login,会提示验证码错误 然 ...

  4. Dysregulation of Exosome Cargo by Mutant Tau Expressed in Human-induced Pluripotent Stem Cell (iPSC) Neurons Revealed by Proteomics Analyses(蛋白质组学揭示了人诱导的多能干细胞(iPSC)神经元中表达的突变Tau对外泌体的失调) 解读人:梁玉婷

    期刊名:MCP 发表时间:(2020年4月) IF:4.828 单位:Skaggs School of Pharmacy and Pharmaceutical Sciences, University ...

  5. Nginx 从入门到放弃(三)

    今天来学习nginx的日志管理,并通过日志脚本来切割日志并保存. nginx日志管理 在nginx中设置日志格式  http {    log_format main  '$remote_addr - ...

  6. JVM学习篇-第一篇

    JVM学习篇-第一篇 JDK( Java Development Kit): ​ Java程序设计语言.Java虚拟机.Java类库三部分统称为JDK,JDK是用于支持Java程序开发的最小环境** ...

  7. 逻辑式编程语言极简实现(使用C#) - 4. 代码实现(完结)

    本文是本系列的完结篇.本系列前面的文章: 逻辑式编程语言极简实现(使用C#) - 1. 逻辑式编程语言介绍 逻辑式编程语言极简实现(使用C#) - 2. 一道逻辑题:谁是凶手 逻辑式编程语言极简实现( ...

  8. SEO:前端优化网站,提高排名

    最近优化网站排名,记录一下过程及注意的东西. 1.查询方法 百度:site:+网站名  例如:site:realtour.cn360:  直接输入网址:www.realtour.cn 2.网站优化方式 ...

  9. 蜂鸟E203系列——Linux开发工具

    欲观原文,请君移步 Vivado安装 vivado是运行工程的工具,所以必须安装 后台回复[vivado2017]可获取vivado 2017.4 | 后台回复[vivado2020]可获取vitis ...

  10. Yii2源码分析(一):入口

    写在前面,写这些随笔是记录下自己看Yii2源码的过程,可能会有些流水账,大部分解析放在注释里说明,由于个人水平有限,有不正确的地方还望斧正. web入口文件Index.php // 定义全局的常量,Y ...