Time of Update: 2016-10-18
多線程編程必須理解的一些基本概念,適用於所有程式設計語言。內容:並髮式編程多任務作業系統多線程vs多進程安全執行緒線程的生命週期線程的類型並髮式編程不同的編程範式對軟體有不同的視角。並髮式編程將軟體看做任務和資源的組合——任務之間競爭和共用資源,當資源滿足時執行任務,否則等待資源。並髮式編程使得軟體易於理解和重用,在某些情境能夠極大提高效能。多任務作業系統要實現並發,首先需要作業系統的支援。現在的作業系統大部分都是多任務作業系統,可以“同時”執行多個任務。多任務可以在進程或線程的層面執行。進程是
Time of Update: 2016-10-18
如上一節,python的threading.Thread類有一個run方法,用於定義線程的功能函數,可以在自己的線程類中覆蓋該方法。而建立自己的線程執行個體後,通過Thread類的start方法,可以啟動該線程,交給python虛擬機器進行調度,當該線程獲得執行的機會時,就會調用run方法執行線程。讓我們開始第一個例子:# encoding: UTF-8import threadingimport time class MyThread(threading.Thread): def
Time of Update: 2016-10-18
goPy 是一個新的開源項目,實現了用 Go 語言來編寫 CPython 擴充。範例程式碼:package simple import ("fmt""gopy") func example(args *py.Tuple) (py.Object, error) {fmt.Printf("simple.example: %v\n", args)py.None.Incref()return py.None, nil} func init() {methods :=
Time of Update: 2016-10-18
1)urllib2+BeautifulSoup抓取Goolge搜尋連結近期,參與的項目需要對Google搜尋結果進行處理,之前學習了Python處理網頁相關的工具。實際應用中,使用了urllib2和beautifulsoup來進行網頁的抓取,但是在抓取google搜尋結果的時候,發現如果是直接對google搜尋結果頁面的原始碼進行處理,會得到很多“髒”連結。看為搜尋“titanic
Time of Update: 2016-10-18
問題的提出上一節的例子中,每個線程互相獨立,相互之間沒有任何關係。現在假設這樣一個例子:有一個全域的計數num,每個線程擷取這個全域的計數,根據num進行一些處理,然後將num加1。很容易寫出這樣的代碼:# encoding: UTF-8import threadingimport time class MyThread(threading.Thread): def run(self): global num time.sleep(1) num
Time of Update: 2016-10-18
死結線上程間共用多個資源的時候,如果兩個線程分別佔有一部分資源並且同時等待對方的資源,就會造成死結。儘管死結很少發生,但一旦發生就會造成應用的停止回應。下面看一個死結的例子:# encoding: UTF-8import threadingimport time class MyThread(threading.Thread): def do1(self): global resA, resB if mutexA.acquire():
Time of Update: 2016-10-18
注意:這段代碼需要wmi 和 系統 win32 擴充支援。沒安裝庫的要先下載安裝,我裝的是 WMI-1.4.6.win32 和 pywin32-218.win32-py2.7還有,代碼裡面檔案目錄自己修改下咯。# -*- coding:gb2312 -*- import wmihardware=file('F:\Python\Hardware.txt','w') w=wmi.WMI()hardware.write("cpu型號,主頻:\n")for
Time of Update: 2016-10-18
互斥鎖是最簡單的線程同步機制,Python提供的Condition對象提供了對複雜線程同步問題的支援。Condition被稱為條件變數,除了提供與Lock類似的acquire和release方法外,還提供了wait和notify方法。線程首先acquire一個條件變數,然後判斷一些條件。如果條件不滿足則wait;如果條件滿足,進行一些處理改變條件後,通過notify方法通知其他線程,其他處於wait狀態的線程接到通知後會重新判斷條件。不斷的重複這一過程,從而解決複雜的同步問題。可以認為Condi
Time of Update: 2016-10-18
import httplibimport urllibimport timeimport json class Transaction(object): def __init__(self): self.custom_timers = {} def run(self): conn = httplib.HTTPConnection("localhost:8080") headers = {"Content-type":
Time of Update: 2016-10-18
#coding=gbk import osimport sysimport reimport timeimport urllib2 def perror_and_exit(message, status = -1): sys.stderr.write(message + '\n') sys.exit(status) def get_text_from_html_tag(html): pattern_text = re.compile(r">.*?
Time of Update: 2016-10-18
現在,我們來用Python,建立GET包和POST包。至於有什麼用處,大家慢慢體會。Python 中包含了大量的庫,作為一門新興的語言,Python 對HTTP有足夠強大的支援。現在,我們引入新的庫 httplib 以及 urllib這兩個庫根據名稱,我們可以知道他們是對於HTTP以及URL的操作。首先我們先要與伺服器建立串連。(我們以某微博作為例子實現下文的各種功能)conn =
Time of Update: 2016-10-18
微博很火啊,那python是不是可以調用微博的api做一個小應用呢?答案是:必須可以,哈哈使用python調用weibo api # 調用的url地址 此為擷取某人的個人資訊的api http://open.weibo.com/wiki/2/users/show the_url =
Time of Update: 2016-10-18
python 編寫server的步驟:1. 第一步是建立socket對象。調用socket建構函式。如:socket = socket.socket( family, type )family參數代表地址家族,可為AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用於同一台機器上的處理序間通訊。type參數代表通訊端類型,可為SOCK_STREAM(流通訊端)和SOCK_DGRAM(資料通訊端)。2.
Time of Update: 2016-10-18
如果你在開線程請求資料庫中如果你覺得所用時間太長的話,你就可以通過python資料庫連接池去改善一下在此方面的不足之處,以下是文章的具體介紹,你可以通過我們的文章對python資料庫連接池有一個更好的瞭解。昨天測試了一下開500個線程去請求資料庫,不過這個時間不清楚會耗多少。即同時發起這麼多的線程其效率會如何。於是想到是不是用資料庫連接池技術可以明顯改善一下這樣的串連操作呢。呆會整理完了之後要測試一個資料:頻繁建立與關閉資料庫連接的效率與串連池之間的效能對比!一、DBUtils模組學習DBUti
Time of Update: 2016-10-18
在討論動態捕獲異常時讓我大吃一驚的是,可以讓我找到隱藏的Bug和樂趣...有問題的代碼下面的代碼來自一個產品中看起來是好的抽象代碼 - slightly(!) .這是調用一些統計資料的函數,然後進行處理 . 首先是用socket串連擷取一個值,可能發生了socket錯誤.由於統計資料在系統中不是至關重要的,我們只是記一下日誌錯誤並繼續往下走.(請注意,這篇文章我使用doctest測試的 - 這代表代碼可以運行!)>>> def get_stats():... pass...>>>
Time of Update: 2016-10-18
pyqt4寫的介面 find_ui.py#-*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def
Time of Update: 2016-10-18
需求:把中文字串進行繁體和簡體中文的轉換;思路:引入簡繁體處理庫,有興趣的同學可以研究一下內部實現,都是python寫的1、下載zh_wiki.py及langconvzh_wiki.py:https://github.com/skydark/nstools/blob/master/zhtools/zh_wiki.pylangconv.py:https://github.com/skydark/nstools/blob/master/zhtools/langconv.py下載langconv.py
Time of Update: 2016-10-18
python 太強大了,以至於它什麼都可以做,哈哈,開個玩笑。但是今天要講的真的是一個非常神奇的應用。使用python寫一個聊天工具其實大家平時用的QQ類似的聊天工具,也是使用socket進行聊天,只是它還包含了更加複雜的功能。基本原理是一樣的。python實現聊天功能,主要用到了socket模組。下面直接上執行個體吧server端import sockets=socket.socket()#建立socket連結s.bind(('127.0.0.1',8000))#監聽串連請求,
Time of Update: 2016-10-18
網路由下往上分為物理層、資料連結層、網路層、傳輸層、會話層、展示層和應用程式層。HTTP是高層協議,而TCP/IP是個協議集,包過許多的子協議。包括:傳輸層的
Time of Update: 2016-10-18
閱讀 Zen of Python,在Python解析器中輸入 import this. 一個犀利的Python新手可能會注意到"解析"一詞, 認為Python不過是另一門指令碼語言. "它肯定很慢!"毫無疑問Python程式沒有編譯型語言高效快速. 甚至Python擁護者們會告訴你Python不適合這些領域. 然而,YouTube已用Python服務於每小時4千萬視頻的請求. 你所要做的就是編寫高效的代碼和需要時使用外部實現(C/C++)代碼.