我聽說過gevent基於事件的非同步處理功能 如何高效率,該專案已很少使用,今天是沒什麼學習一些簡單的使用。
詳細的理論這裡不怎麼說了,僅僅是有些了解。詳細的原理還不能解釋的非常清楚。
只是協程這樣的概念在golang裡面非常多。
寫了乙個訪問網路,使用同步操作,gevent 和 多執行緒對照的樣例。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# python2.7x
# gevent_urllib2.py
# author: orangelliu
# date: 2014-08-20
import gevent.monkey
gevent.monkey.patch_socket()
import gevent
import urllib2
import json
import threading
def fetch(pid):
response = urllib2.urlopen('')
result = response.read()
btypes = len(result)
print 'process %s : %s'%(pid, btypes)
def synchronous():
for i in range(10):
fetch(i)
def asynchonous():
threads =
for i in range(10):
gevent.joinall(threads)
def mulithread():
threads =
for i in range(10):
th = threading.thread(target=fetch, args=(i,))
for thread in threads:
thread.start()
for thread in threads:
threading.thread.join(thread)
import time
print 'sync....'
ss = time.time()
synchronous()
print 'sync time is %s'%(time.time()-ss)
print 'async'
sa = time.time()
asynchonous()
print 'async time is %s'%(time.time()-sa)
print 'async'
sm = time.time()
mulithread()
print 'thread time is %s'%(time.time()-sm)
這結果僅僅能作為參考。由於不同的時間網路狀況有差異,可是總的來說多執行緒最快。gevent還行,同步最慢。
可是考慮到gevent的開銷非常小。所以還是非常具有價效比的。
還有從結果中能夠看到gevent和多執行緒都會有上下文切換,所以執行結果的執行緒id是亂序的,這個非常好理解。
sync....
process 0 : 8657
process 1 : 8657
process 2 : 8657
process 3 : 8657
process 4 : 8657
process 5 : 8657
process 6 : 8657
process 7 : 8657
process 8 : 8657
process 9 : 8657
sync time is 2.7610001564
async
process 8 : 8657
process 7 : 8657
process 6 : 8657
process 2 : 8657
process 5 : 8657
process 3 : 8657
process 0 : 8657
process 4 : 8657
process 1 : 8657
process 9 : 8657
async time is 1.50199985504
async
process 0 : 8657
process 1 : 8657
process 3 : 8657
process 4 : 8657
process 5 : 8657
process 7 : 8657
process 9 : 8657
process 8 : 8657
process 6 : 8657
process 2 : 8657
thread time is 0.986000061035
本文出自
「orangleliu筆記本」
部落格,請務必保留此出處
C 網路抓包
以前一直都是知道用winpcap的,現在網上搜了一下,有用c 封裝好了的,很好用 下面是其中的幾個用法 這個類庫作者的主頁 pcapopen 有下面幾個方法 pcapopen pcapopen bool promiscuous mode pcapopen bool promiscuous mode,...
OTT 網路抓包
有些時候,我們為了更好分析ott盒子的網路行為,我們需要對其進行抓包。一般情況下有兩種狀況。該盒子我們有root許可權,可以通過adb登陸到盒子中 該盒子我們無法登入 在這兩種情況下,我們可以分別用不同的方式來完成網路抓包 這種情況下,我們一般是通過盒子的內部命令tcpdump進行抓包分析 cd m...
Linux 網路抓包
除錯網路程式時,通常需要抓包分析。linux下的tcpdump就很好。ubuntu下預設已經安裝。下面先舉個實際的例子.比如我有乙個c 程式監聽本地埠8889,另乙個newlisp程式通過tcp和其通訊。首先可以檢查一下有幾個網路介面。root dean ga ma790xt ud4p tcpdum...