python异步框架twisted_Python学习八十七天:使用异步的twisted框架写入数据

1.twisted框架介绍

Twisted是用Python实现的基于事件驱动的网络引擎框架;

Twisted支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。就像Python一样,Twisted也具有“内置池”(batteries-included)的特点。Twisted对于其支持的所有协议都带有客户端和服务器实现,同时附带有基于命令行的工具,使得配置和部署产品级的Twisted应用变得非常方便。

2.MySQL数据库信息保存到settings文件中

首先我们需要把MySQL数据库中的配置信息保存到settings文件中,如:MYSQL_HOST = 'localhost'的形式;

MYSQL_HOST = 'localhost'

MYSQL_USER = 'xkd'

MYSQL_PASSWORD = '123456'

MYSQL_DATABASE = 'item_database'

MYSQL_PORT = 3306

MYSQL_OPTIONAL = dict(

USE_UNICODE = True,

CHARSET = 'utf8',

)

然后从settings文件中将这些信息导入到pipeline.py文件中使用;

from .settings import MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_OPTIONAL

class MysqlPipeline:

def __init__(self):

self.conn = MySQLdb.connect(host=MYSQL_HOST, user=MYSQL_USER, password=MYSQL_PASSWORD, database=MYSQL_DATABASE, use_unicode=MYSQL_OPTIONAL.get('USE_UNICODE'), charset=MYSQL_OPTIONAL.get('CHARSET'))

self.cursor = self.conn.cursor()

def process_item(self, item, spider):

sql = 'insert into item(title, image_url, date, image_path, url, url_id)' \

'values (%s, %s, %s, %s, %s, %s)'

date = item['date']

self.cursor.execute(sql, args=(item['title'], item['image_url'], date, item['image_path'], item['url'], item['url_id']))

self.conn.commit()

return item

def spider_closed(self, spider):

self.cursor.close()

self.conn.close()

3.创建异步Pipeline写入数据库

首先创建一个用于异步写入数据的AIOMysqlItemPipeline类,然后在这个类的初始化方法中创建一个pool连接池;

然后在from_settings()方法中获取settings文件中的数据库配置信息,并将配置信息存入一个字典中。使用Twisted中的adbapi获取数据库连接池对象,使用前需要导入adbapi,如:from twisted.enterprise import adbapi。使用时需要用到ConnectionPool连接池:pool=adbapi.ConnectionPool('MySQLdb',**params),参数MySQLdb是使用的数据库引擎的名字,params就是要传递的数据库配置信息;

接着在process_item()方法中使用数据库连接池对象进行数据库操作,自动传递cursor对象到数据库操作方法runInteraction()的第一个参数(自定义方法)如:ret=self.connection_pool.runInteraction(self.mysql_insert,item);

还可以设置出错时的回调方法,自动传递出错消息对象failure到错误处理方法的第一个参数(自定义方法)如:ret.addErrback(self.error_callback);

最后记得修改settings文件中的ITEM_PIPELINES配置,如:'XKD_Dribbble_Spider.pipelines.AIOMysqlItemPipeline': 2;

from twisted.enterprise import adbapi

import MySQLdb.cursors

class AIOMysqlItemPipeline:

def __init__(self, pool):

self.connection_pool = pool

# 1:调用类方法

@classmethod

def from_settings(cls, settings):

connkw = {

'host': MYSQL_HOST,

'user': MYSQL_USER,

'password': MYSQL_PASSWORD,

'db': MYSQL_DATABASE,

'port': MYSQL_PORT,

'use_unicode': MYSQL_OPTIONAL.get('USE_UNICODE'),

'charset': MYSQL_OPTIONAL.get('CHARSET'),

'cursorclass': MySQLdb.cursors.DictCursor,

}

pool = adbapi.ConnectionPool('MySQLdb', **connkw)

return cls(pool)

# 2:执行process_item

def process_item(self, item, spider):

ret = self.connection_pool.runInteraction(self.mysql_insert, item)

ret.addErrback(self.error_callback)

def mysql_insert(self, cursor, item):

sql = 'insert into item(title, image_url, date, image_path, url, url_id)' \

'values (%s, %s, %s, %s, %s, %s)'

date = item['date']

cursor.execute(sql, args=(item['title'], item['image_url'], date, item['image_path'], item['url'], item['url_id']))

def error_callback(self, error):

print('insert_error =========== {}'.format(error))

修改settings文件

ITEM_PIPELINES = {

# 'XKD_Dribbble_Spider.pipelines.XkdDribbbleSpiderPipeline': 300,

# 当items.py模块yield之后,默认就是下载image_url的页面

'XKD_Dribbble_Spider.pipelines.ImagePipeline': 1,

'XKD_Dribbble_Spider.pipelines.AIOMysqlItemPipeline': 2,

}

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

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

相关文章

无光驱如何修复W7计算机,Win7电脑没有光驱怎么装系统?

现在很多人买台式电脑不会再配置光驱了,可是这就让人有疑问了,如果没有光驱怎么装系统呢?其实方法很简单,我们可以用U盘,但是要想使用U盘必须先制作启动盘,如果你不懂怎么制作启动盘的话,那就赶…

python矩阵函数_NumPy 矩阵库函数

NumPy包含一个矩阵库NumPy.matlib,这个模块的函数用于处理矩阵而不是ndarray对象。NumPy中,ndarray数组可以是n维的,与此不同,矩阵总是二维的,但这两种对象可以相互转换。matlib.empty()empty()函数返回一个新的矩阵&a…

apache服务器工作原理,Apache服务器的原理简介

Apache是由模块组成的,除了内核模块以外,其他的模块都可以看作是Apache的一个补丁。http__core.c是最基本的,出足它惟一的内核模块,一个最小的Apache编译只包含这个模块,其他的动态模块是需要在配制文件中定义的二在Re…

安卓手机qq怎么看密友值_qq亲密关系分数值是什么在哪看 怎么查情侣值或闺蜜值方法...

qq亲密关系分为三种,有情侣关系、闺蜜关系和基友关系。而现在手机QQ8.1.5版本中有上线了情侣值和闺蜜值,而亲密关系值怎么看呢?一起来了解下。qq亲密关系分值什么前段时间亲密关系上线后,很多情侣之间或者是闺蜜、基友之间都绑定了…

cos大乱斗服务器维护,《COS大乱斗》服务器数据互通公告

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼各位亲爱的COSer:为了给大家提供更加优质的游戏环境,增加游戏乐趣,提高游戏互动性,我们将会在2016年11月7日对COS大乱斗混服【S4-261】区,APP【1-79】区,腾讯专…

verilog 给数组集体赋值_Verilog中如何对数组赋值(存储器memory详解)

http://blog.sina.com.cn/s/blog_9424755f0101rhrh.html存储器是一个寄存器数组。存储器使用如下方式说明:reg [ msb: 1sb] memory1 [ upper1: lower1],memory2 [upper2: lower2],. . . ;例如:reg [0:3 ] MyMem [0:63]//MyMem为64个4位寄存器…

ajax排行页面,ajax简单页面

简单的注册页面运用ajax主页面无标题文档//首先引用jquery文件登录页面用户名:密码:$("#btn").click(function(){//1.取内容var uid $("#uid").val();var pwd $("#pwd").val();//2.拿内容去数据库验证$.ajax({url:"…

云函数查询_速览 | 京东云5月重要产品与功能更新

新增产品高可用组 正式发布产品概述:高可用组是京东云提供的云主机逻辑集合,高可用组内的云主机分散部署在相互隔离的物理资源上,当出现硬件故障或定时维护时只会影响部分云主机,客户业务仍为可用状态,本服务免费。流水…

服务器文件夹同步到手机,本机文件夹同步到云服务器

本机文件夹同步到云服务器 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。本节操作介绍本地MacOS系统主机通过安装“Microsoft Rem…

centos7恢复mysql数据库_mysql数据库恢复过程记录

月初某晚朋友说数据库误删了,没有备份能不能恢复,我一愣,突然想到之前我们遇到过的问题,便问他是否开启了binlog。show variables like log_bin; //查看命令如果现实log_bin是ON,就说明打开了。值得庆幸,他…

绝地求生6月28日服务器维护,绝地求生6月28日更新到几点 吃鸡6月28日更新内容一览...

绝地求生6月28日更新到几点? 绝地求生6月28日更新内容一览。下面跟着小编一起来看看吧!绝地求生6.28维护时间上午10点开始(预计3个小时)下午1点开服绝地求生6月28日维护内容介绍通行证: 萨诺调整了通行证系统的机制- 每日最多获取XP 限制 80 改为120- 完成任务最少游戏时间&am…

in ms sql 集合参数传递_神奇的 SQL → 为什么 GROUP BY 之后不能直接引用原表中的列?...

GROUP BY 后 SELECT 列的限制标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。我们来看个例子:我们有 学生班级表(tbl_student_cla…

服务器日志文件中包含堆栈跟踪,日志框架 Logback 官方手册(第三章:Configuration)...

以下内容翻译整理自logback官方手册,地址:logback官方手册logback 配置将日志请求插入应用程序代码需要相当多的计划和工作。观察表明,大约有4%的代码用于日志记录。因此,即使是一个中等大小的应用程序,其代码中也会包…

extjs 月份选择控件_Excel | 做个生日提醒控件,本月或下月过生日的员工信息随你查看...

问题情境掌握职工的生日信息,及时送出生日祝福,是每位HR必备的技能。某公司要求将公司的员工生日信息实现查询,可方便的查看本月及下月过生日的员工信息,效果如下动图:效果中可以看出:勾选”本月生日“&…

音频服务器未显示,Win7系统没有声音提示“一个或多个音频服务未运行”如何解决...

在win7系统中没有声音,点击右下角小喇叭,按照提示进行修复完成后的“疑难解答已完成”界面,提示已找到问题“一个或多个音频服务未运行”如何解决呢?出现这样的情况,我们只需将音频所需服务启动即可。下面跟随小编脚步…

php 两个数组 交集_两个数组的交集

给定两个数组,编写一个函数来计算它们的交集。示例1:输入:nums1 [1,2,2,1], nums2 [2,2]输出:[2,2]示例2:输入:nums1 [4,9,5], nums2 [9,4,9,8,4]输出:[4,9]说明:输出结果中每个…

11纯代码 oc xcode_iOS代码染色原理及技术实践

背景随着业务的迅速发展,业务代码逻辑的复杂度增加。QA测试的质量对于产品上线后的稳定性更加重要。一般QA测试的工作流程分为两大项:自动化测试和人工测试。这两种测试后都需要得到代码覆盖率。自动化测试的覆盖率,在双端都有比较成熟的方案…

删除了几个月的照片能找回么_手机删除照片怎么恢复正常?自动修复,一看就会...

手机删除照片怎么恢复正常?都说鱼的记忆只有七秒钟,那你的记忆是多久呢?曾经手机拍照留念的照片,是否由于一些微不足道的事情,冲动之下删掉了!想要还原删除掉的手机照片,首先要找对照片恢复器:手…

并发测试mysql_Jmeter性能测试系列——结果分析与报告输出

场景运行结束后,需针对测试结果进行性能分析。通常而言,Jmeter性能测试结果分析可从性能测试指标达成方面着手,然后再分析测试过程中出现的异常情况,逐一判断是否存在性能风险。1.用户登陆并发测试结果分析获取测试指标提取阶段获…

怎样取消连续包月自动续费_苹果手机连续包月会员怎么取消 设置iPhone解除应用自动续费...

[闽南网]相信我们都有在用苹果手机下载软件,但是有时候一个不小心就被开通了包月续费,这个的话会长期进行扣费,要是不想开通的话可以进行取消,不知道的话可以查看下面的教程。取消收费项目是可以从电脑端和手机端两个渠道来进行&a…