關於python的併發能力,大家有目共睹,坑是要乙個個的來填的。最近有大牛推薦了multiprocessing,還說裡面有個dummy的多程序包檔案,很好用。實測下具體的效果吧。
先來個傳統的例子,單一的任務者--消費者模式,做到了任務產生和消費的分離。
import time
import threading
import queue
class consumer(threading.thread):
def __init__(self,queue):
threading.thread.__init__(self)
self._queue=queue
def run(self):
while true:
msg=self._queue.get()
if isinstance(msg, str) and msg=='quit':
break
print 'i am threading and i recieve %s' %msg
print 'bye bye'
def producer():
queue=queue.queue()
worker=consumer(queue)
worker.start()
start_time=time.time()
while time.time()-start_time<5:
queue.put('something at %s' %time.time())
time.sleep(1)
queue.put('quit')
worker.join()
if __name__=="__main__":
producer()
這種是單一執行緒執行的,效能考慮肯定不如意。下面就引入mutiprocessing
import urllib2
import time
from multiprocessing.dummy import pool as threadtool
urls=["","",\
"",'',"",\
"","/about/","/doc",\
'/getit/']
now=time.time()
"常規寫法執行時間"
results=
for url in urls:
result=urllib2.urlopen(url)
print time.time()-now
now=time.time()
"多程序"
pool=threadtool(8)
result=pool.map(urllib2.urlopen,urls)
pool.close()
pool.join()
print time.time()-now
其中的 pool物件需要一些引數,但現在最緊要的就是:
程序。它可以限定執行緒池中worker的數量。如果不填,它將採用系統的核心數作為初值.
看下最後兩個的執行時間對比,
8.4880001545
2.40899991989
效果還是很明顯的,至於設定的程序數的大小,根據負載機的配置來確定,選擇最合適自己的大小就可以了。
在實際應用中的乙個例子,應用場景是,多個測試環境,登入的密碼和賬戶一樣,要驗證的測試點也一致,唯一的區別就是訪問的url不一樣。總結下來,就是只需要把url做成list,map呼叫執行函式,以及對應的引數了。具體如下
def login(url):
browser=webdriver.chrome()
browser.get(url)
browser.find_element_by_name("username").send_keys("testuser@***l.com")
browser.find_element_by_name("password").send_keys("testuser")
browser.find_element_by_xpath("//input[@value='登 錄']").click()
print browser.get_cookies()
urls=["",""]
now=time.time()
"執行緒池的方式"
pool=threadtool(2)
result=pool.map(login,urls)
pool.close()
pool.join()
print time.time()-now
這樣執行的時候,就能併發的同時去驗證多個環境了。 python多程序非同步併發處理
如下將實現乙個簡單的多程序,非同步的,併發機制 1.一些初始定義 import multiprocessing aaa 多個程序公用的公共變數 用於多個程序同時要處理的那個變數 將用於多程序分布式散開的乙個原本list for遍歷將做12次 test list 3,4,5,6,7,8,9,10,11...
Hibernate 處理併發
一 事務 指運算元據庫的乙個程式執行單無,這些操作要麼全部成功,要麼全部失敗以保證資料的完成性和統一性.二 多事務併發引起的問題 a 第一類丟失更新 撤銷乙個事務時把其它事務更新的資料也覆蓋了。for example 事務a 和b 同時訪問數 據data 如果事務b 更新了資料,但事務a執行了回滾操...
核心併發處理
隨著硬體的發展,smp 對稱多處理器 已經很普遍,如果核心的排程機制是可搶占的,那麼smp和核心搶占是多執行緒執行的兩種場景。當多個執行緒同時訪問核心的資料結構時,我們就需要對其做序列化處理。自旋鎖和互斥體 訪問共享資源的 區稱為臨界區。自旋鎖 spinlock 和互斥體 mutex,mutual ...