python併發處理實測

2021-08-13 10:50:31 字數 2381 閱讀 6591

關於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 ...