Time of Update: 2017-01-19
本文執行個體講述了python使用Tkinter顯示網狀圖片的方法。分享給大家供大家參考。具體實現方法如下:''' tk_image_view_url_io.pydisplay an image from a URL using Tkinter, PIL and data_streamtested with Python27 and Python33 by vegaseat 01mar2013'''import io# allows for image formats other than
Time of Update: 2017-01-19
這裡介紹幾個常用的列表操作添加元素添加元素使用列表的內建方法appendnumber = [1, 2, 3, 4]number.append(5) # number = [1, 2, 3, 4, 5]number.append([6,7]) # number = [1, 2, 3, 4, 5, [6, 7]]number.append({'a':'b'}) # number = [1, 2, 3, 4, [6, 7], {'a',
Time of Update: 2017-01-19
介紹lambdaPython用於支援將函數賦值給變數的一個操作符 預設是返回的,所以不用再加return關鍵字,不然會報錯result = lambda x: x * xresult(2) # return
Time of Update: 2017-01-19
下面說的和三目運算有點相似,但又不一樣,實在不知道該如何擬定標題,先就是這個標題吧,大家都知道python中沒有三目運算,但是and/or有點類似三目運算:and/or單獨使用表示邏輯關係與和或,也可以組和使用,用法如下andand前後如果某一個值為假(False, '', [], {}, None…)則返回第一個假值 如果所有值都為真則返回最後一個真值or如果or任意一個值為真,則立刻返回這個值 如果所有值都為假,則or返回最後一個假值例子result = 'test' and True #
Time of Update: 2017-01-19
Python 中有三個非常好用的資料結構,列表,元組和字典, 元組是不可變的,列表可以儲存任意類型的Python對象,並可以隨意擴充沒有大小限制, 字典是一個key-value的索引值映射的類型,可以存放任何Python對象,可以嵌套字典, 值可以是字典元組或者字典這裡說是Python 字典和列表的陷阱不如說是Python的一些特性,如果不瞭解這些特性 就會引發一些難以尋找的bug下面我們來介紹這些特性Python中所有對列表和字典的使用僅僅是對原來對象的引用而不是建立一個新的對象 如下面代碼:
Time of Update: 2017-01-19
Python 中的字典是Python中一個索引值映射的資料結構,下面介紹一下如何優雅的操作字典.1.1 建立字典Python有兩種方法可以建立字典,第一種是使用花括弧,另一種是使用內建 函數dict>>> info = {}>>> info = dict()1.2 初始化字典Python可以在建立字典的時候初始化字典>>> info = {"name" : 'cold'}>>> info = dict(name =
Time of Update: 2017-01-19
做了一個線上代碼高亮的項目,強大的Python一如既往沒讓我失望,一個強大的Pygments模組可以對多種(很多)語言進行代碼高亮下面來介紹一下它:首先安裝很簡單,使用easy_install來進行安裝:easy_install pygments安裝完後我們來使用,Python的簡單不會讓大家失望:from pygments.lexers import PythonLexverfrom pygments.formatters import HtmlFormatterfrom pygments
Time of Update: 2017-01-19
使用Python寫檔案的時候,或者將網路資料流寫入到本地檔案的時候,大部分情況下會遇到:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position ... 這個問題。 網路上有很多類似的檔案講述如何解決這個問題,但是無非就是encode,decode相關的,這是導致該問題出現的真正原因嗎?不是的。 很多時候,我們使用了decode和encode,試遍了各種編碼,utf8,utf-8,gbk,gb2312等等,
Time of Update: 2017-01-19
公司一個項目需要上傳圖片,一開始同事將圖片上傳後結合當前主機拼成了一個絕對的URL(http://192.168.1.1:888/m/getimg?filename=xxx.jpg由於同時給手機終端提供介面,在手機終端會引起一些bug,改完代碼後要求將以前的uri替換成相對的URL(/m/getimg?filename=xxx.jpg),由於圖片是用img標籤嵌入到內容同時用a標籤括起顯示大圖的,所以需要讀取資料庫並對內容進行替換,指令碼內容如下:#!/usr/bin/env
Time of Update: 2017-01-19
原因Blog是一個更新並不很頻繁的一套系統,但是每次重新整理頁面都要更新資料庫反而很浪費資源,添加靜態頁面產生是一個解決辦法,同時緩衝是一個更好的主意,可以結合Memcached添加少量的代碼進行緩衝,而且免去去了每次更新文章都要重建靜態頁面,特別當頁面特別多時.實現主要通過頁面的uri進行緩衝,結合tornado.web.RequestHandler的prepare和on_finish方法函數, prepare
Time of Update: 2017-01-19
引子Linux下不支援QQ等功能豐富的IM,雖然可以通過wine運行QQ2012,但是還是喜歡在gtalk群中聊天,gtalk群不支援圖片方式,這就要靠我們大家自己來解決了,eleven開放了一個Image上傳和顯示介面,提供了使用curl來解決,但是我們公司的網路使用squid禁止了curl的訪問,所以整天看他們這麼爽的分享圖片我也不甘心阿,所以就使用Python寫了一個分享圖片的指令碼實現使用scrot截圖,然後使用urllib2庫上傳圖片,如果存在PyQt4庫則會將結果放到剪貼簿上,如果不
Time of Update: 2017-01-19
引子之前clubot使用的pyxmpp2的預設mainloop也就是一個poll的主迴圈,但是clubot上線後資源佔用非常厲害,使用strace跟蹤發現clubot在不停的poll,查看pyxmpp2代碼發現pyxmpp2的poll在使用逾時阻塞時使用最小逾時時間,而最小逾時時間一直是0,所以會變成一個沒有逾時的非阻塞poll很浪費資源,不打算更改庫代碼,所以自己仿照poll的mainloop寫了一個更加高效的epoll的mainloop實現#!/usr/bin/env python# -*-
Time of Update: 2017-01-19
TornadoTornado 是一款非阻塞可擴充的使用Python編寫的web伺服器和Python Web架構, 可以使用Tornado編寫Web程式並不依賴任何web伺服器直接提供高效的web服務.所以Tornado不僅僅是一個web架構而且還是一款可以用於生產環境的高效的web伺服器Torando 在Linux和FreeBSD上使用高效的非同步I/O模型 epoll 和kqueue來實現高效的web伺服器, 所以
Time of Update: 2017-01-19
我打算將WebQQ單獨出來運行, 一開始直接拷貝了pyxmpp2的mainloop, 但是跑起來問題多多, 所以我又研究了利用Tornado進行網路編程(這裡), 所以我放棄了Pyxmpp2的mainloop,使用Tornado進行重寫首先放出項目代碼引子WebQQ協議是一套基於HTTP的QQ協議, 而用Python的urllib2庫進行請求太慢, 因為HTTP本身就使用socket請求, 所以改用多工I/O模型, 而Tornado簡單高效, 看過代碼後可以輕鬆上手.平台相容性很好,
Time of Update: 2017-01-19
今天對clubot進行了升級, 但是匯入資料後中文亂碼, 一開是找資料說是在建立引擎的時候添加編碼資訊:engine = create_engine("mysql://root:@localhost:3306/clubot?charset=utf8")但是這並不行, 然後查看錶資訊:> show create table clubot_members;clubot_members | CREATE TABLE `clubot_members` ( `id` int(11) NOT
Time of Update: 2017-01-19
裝飾器對與Python新手以至於熟悉Python的人都是一個難理解, 難寫的東西. 那麼今天就分享一下我對Python 裝飾器的理解所謂裝飾器僅僅是一種文法糖, 可作用的對象可以是函數也可以是類, 裝飾器本身是一個函數, 其主要工作方式就是將被裝飾的類或者函數當作參數傳遞給裝飾器函數, 比如定義如下裝飾器import timedef run_time(func): def wrapper(*args, **kwargs): start = time.time() r = func(
Time of Update: 2017-01-19
由於tornado內建的AsyncHTTPClient功能過於單一, 所以自己寫了一個基於Tornado的HTTP用戶端庫, 鑒於自己多處使用了這個庫, 所以從項目中提取出來, 寫成一個單獨庫 tornadohttpclientTornadoHTTPClient 是一個基於Tornado的高效的非同步HTTP用戶端庫, 支援Cookie和代理, 目前僅在Python2.7平台上測試過, 不支援Python3聽取了仙子君的意見,
Time of Update: 2017-01-19
Tornado 4.0 已經發布了很長一段時間了, 新版本廣泛的應用了協程(Future)特性. 我們目前已經將 Tornado 升級到最新版本, 而且也大量的使用協程特性.很長時間沒有更新部落格, 今天就簡單介紹下 Tornado 協程實現原理, Tornado 的協程是基於 Python 的產生器實現的, 所以首先來回顧下產生器.產生器Python 的產生器可以儲存執行狀態 並在下次調用的時候恢複, 通過在函數體內使用 yield 關鍵字 來建立一個產生器, 通過內建函數 next
Time of Update: 2017-01-19
首先介紹下怎麼發現的吧, 線上的項目日誌是通過 logging 模組打到 syslog 裡, 跑了一段時間後發現 syslog 的 UDP 串連超過了 8W, 沒錯是 8 W. 主要是 logging 模組用的不對我們之前有這麼一個需求, 就是針對每一個串連日誌輸出當前串連的資訊, 所以每一個 串連就建立了一個日誌執行個體, 並分配一個 Formatter, 建立日誌執行個體為了區分其他串連 所以我就簡單粗暴的用了當前對象的 id 來作為日誌名稱:import loggingclass
Time of Update: 2017-01-19
引子之前一直盲目的認為 Python 不會存在記憶體泄露, 但是眼看著上線的項目隨著已耗用時間的增長 而越來越大的記憶體佔用, 我意識到我寫的程式在發生記憶體泄露, 之前 debug 過 logging 模組導致的記憶體泄露.目前看來, 還有別的地方引起的記憶體泄露. 經過一天的奮戰, 終於找到了記憶體泄露的地方, 目前項目 跑了很長時間, 在業務量較小的時候記憶體還是能回到剛啟動的時候的記憶體佔用.什麼情況下不用這麼麻煩如果你的程式只是跑一下就退出大可不必大費周章的去尋找是否有記憶體泄露,