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.pswp.cn/news/529588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529588.shtml
英文地址,請注明出處:http://en.pswp.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…