Time of Update: 2016-10-18
我們都知道並發(不是並行)編程目前有四種方式,多進程,多線程,非同步,和協程。多進程編程在python中有類似C的os.fork,當然還有更高層封裝的multiprocessing標準庫,在之前寫過的python高可用程式設計方法http://www.cnblogs.com/hymenz/p/3488837.html中提供了類似nginx中master process和worker
Time of Update: 2016-10-18
首先弄明白幾個概念:Documents 、terms and posting在資訊檢索(IR)中,我們企圖要擷取的項稱之“document”,每一個document是被一個terms集合所描述的。 “document”和“term”這兩個詞彙是IR中的術語,它們是來自“圖書館管理學”的。通常一個document認為是一塊文本,(Usually a document is thought of as a piece of text, most likely in a machine
Time of Update: 2016-10-18
python的os module中有fork()函數用於產生子進程,產生的子進程是父進程的鏡像,但是它們有各自的地址空間,子進程複製一份父進程記憶體給自己,兩個進程之 間的執行是相互獨立的,其執行順序可以是不確定的、隨機的、不可預測的,這點與多線程的執行順序相似。 import osdef child(): print 'A new child:', os.getpid() print 'Parent id is:', os.getppid()
Time of Update: 2016-10-18
在實驗中需要自己構造單獨的HTTP資料報文,而使用SOCK_STREAM進行發送資料包,需要進行完整的TCP互動。因此想使用原始通訊端進行編程,直接構造資料包,並在IP層進行發送,即採用SOCK_RAW進行資料發送。使用SOCK_RAW的優勢是,可以對資料包進行完整的修改,可以處理IP層上的所有資料包,對各欄位進行修改,而不受UDP和TCP的限制。下面開始構造HTTP資料包,IP層和TCP層使用python的Impacket庫,http內容自行填寫。#!/usr/bin/env python
Time of Update: 2016-10-18
多進程通訊方法好多,不一而數。剛才試python封裝好嘅多進程通訊模組 multiprocessing.connection。簡單測試一下,效率還可以,應該系對socket封裝,效率可以達到4krps,可以滿足好多方面嘅需求啦。附代碼如下:client#!/usr/bin/python# -*- coding: utf-8 -*-""" download - slave"""__author__ = 'Zagfai'__license__ = 'MIT@2014-02
Time of Update: 2016-10-18
下面利用一個python的執行個體程式,來學習python。這個程式的目的就是分析出所有MP3檔案的Tag資訊並輸出。import os # 匯入os模組,提供檔案路徑,列出檔案等方法import sys # 匯入sys模組,使用sys.modules擷取模組中的所有內容,類似反射的功能from UserDict import UserDict # 這個表示從UserDict類中匯入UserDict,類似於Java中的 import UserDict.UserDict def
Time of Update: 2016-10-18
在python中有個特殊的符號“*”,可以用做數值運算的乘法運算元,也是用作對象的重複運算元,但在作為重複運算元使用時一定要注意注意的是:*重複出來的各對象具有同一個id,也就是指向在記憶體中同一塊地址,在對各個對象進行操作是一定要注意。舉例來說:>>> alist = [range(3)]*4>>> alist[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
Time of Update: 2016-10-18
最近對Python 的對象引用機制稍微研究了一下,留下筆記,以供查閱。首先有一點是明確的:「Python 中一切皆對象」。那麼,這到底意味著什麼呢?如下代碼:#!/usr/bin/env pythona = [0, 1, 2] # 來個簡單的list# 最初,list 和其中各個元素的id 是這樣的。print 'origin'print id(a),afor x in a: print id(x), xprint '----------------------
Time of Update: 2016-10-18
推薦系統中經常需要處理類似user_id, item_id, rating這樣的資料,其實就是數學裡面的疏鬆陣列,scipy中提供了sparse模組來解決這個問題,但scipy.sparse有很多問題不太合用:1、不能很好的同時支援data[i, ...]、data[..., j]、data[i, j]快速切片;2、由於資料儲存在記憶體中,不能很好的支援海量資料處理。要支援data[i, ...]、data[...,
Time of Update: 2016-10-18
關於PythonPython是一種解釋性、物件導向並具有動態語義的進階程式語言。它內建了進階的資料結構,結合了動態類型和動態綁定的優點,這使得它在快速應用開發中非常有吸引力,並且可作為指令碼或膠水語言來串連現有的組件或服務。Python支援模組和包,從而鼓勵了程式的模組化和代碼重用。關於這篇文章Python簡單易學的文法可能會使Python開發人員–尤其是那些編程的初學者–忽視了它的一些微妙的地方並低估了這門語言的能力。有鑒於此,本文列出了一個“10強”名單,枚舉了甚至是進階Python開發人員
Time of Update: 2016-10-18
python 開啟瀏覽器,可以做簡單的刷網頁的小程式 and 其他有想象力的程式。不過僅供學習,勿用非法用途。python的webbrowser模組支援對瀏覽器進行一些操作主要有以下三個方法:webbrowser.open(url, new=0, autoraise=True)webbrowser.open_new(url)webbrowser.open_new_tab(url)
Time of Update: 2016-10-18
我們通常會遇到這樣的需求:通過C++或其他較底層的語言實現了一個複雜的功能模組,需要搭建一個基於Web的Demo,方法查詢資料。由於Python語言的強大和簡潔,其用來搭建Demo非常合適,Flask架構和jinja2模組功能為python提供了方便的web開發能力。同時,python能夠很方便的同其他語言的代碼互動。因此我們選擇python作為開發Demo的工具。假設我們需要調用的模組(提供底層服務)通過標準輸入迴圈讀入資料,處理完畢後把結果寫出到標出輸出,這樣的情境在Linux環境下很常見,
Time of Update: 2016-10-18
最近由於工作的需要開始開發一些Python的東西,由於之前一直在使用Javascript,所以會不自覺的使用一些Javascript的概念,文法什麼的,經常掉到坑裡。我覺得對於從Javascript轉到Python,有必要總結一下它們之間的差異。基本概念Python和Javascript都是指令碼語言,所以它們有很多共同的特性,都需要解譯器來運行,都是動態類型,都支援自動記憶體管理,都可以調用eval()來執行指令碼等等指令碼語言所共有的特性。然而它們也有很大的區別,Javascript這設計之
Time of Update: 2016-10-18
Python擷取伺服器的廠商和型號資訊,在RHEHL6下,需要系統預裝python-dmidecode這個包(貌似預設就已經裝過了)指令碼內容如下[root@linuxidc tmp]# cat test.py#!/usr/bin/env pythonimport dmidecodeinfo=dmidecode.system()info_keys=info.keys()for i in range(len(info_keys)): if
Time of Update: 2016-10-18
#!/usr/bin/pythonimport sys,time,json,loggingimport Queue, threading, datetimefrom lib.base.daemon import Daemonfrom lib.queue.httpsqs.HttpsqsClient import HttpsqsClientfrom lib.db.DbMongodb import DbMongodblogging.basicConfig(level=logging.DEBUG,
Time of Update: 2016-10-18
SQLite是一個包含在C庫中的輕量級資料庫。它並不需要獨立的維護進程,並且允許使用非標準變體(nonstandard variant)的SQL查詢語句來訪問資料庫。一些應用可是使用SQLite儲存內部資料。它也可以在構建應用原型的時候使用,以便於以後轉移到更大型的資料庫。SQLite的主要優點:1.
Time of Update: 2016-10-18
在使用Python編寫的應用的過程中,有時會遇到多個檔案之間傳遞同一個全域變數的情況。檔案1:globalvar.py#!/usr/bin/env python2.7 class GlobalVar: db_handle = None mq_client = None def set_db_handle(db): GlobalVar.db_handle = db def get_db_handle(): return GlobalVar.db_handle def
Time of Update: 2016-10-18
在lua中,一直用lua作為config檔案,或承載資料的檔案 - 好處是lua本身就很好閱讀,然後無需額外寫解析的代碼,還支援在configure檔案中讀環境變數,條件判斷等。在lua中通過loadfile, setfenv實現)python:cat config.pybar = 10foo=100cat python_as_config.py:ns = {}execfile('config.py', ns)print
Time of Update: 2016-10-18
在python2.x中,從object繼承得來的類稱為新式類(如class A(object))不從object繼承得來的類稱為經典類(如class A())新式類跟經典類的差別主要是以下幾點: 1. 新式類對象可以直接通過__class__屬性擷取自身類型:type 2. 繼承搜尋的順序發生了改變,經典類多繼承時屬性搜尋順序: 先深入繼承樹左側,再返回,開始找右側(即深度優先搜尋);新式類多繼承屬性搜尋順序: 先水平搜尋,然後再向上移動例子:經典類: 搜尋順序是(D,B,A,C)>>>
Time of Update: 2016-10-18
cmp( x, y):比較2個對象,前者小於後者返回-1,相等則返回0,大於後者返回1.Python的cmp比較函數比較原理Python的cmp函數可以比較同類型之間,或者不同資料類型之間。然後根據Python的cmp比較函數的傳回值來判定比較大小。>>> list1, list2 = [123, 'xyz'], [456, 'abc']>>> cmp(list1, list2)-1>>> cmp(list2, list1)1>>> list3 = list2 +