Gevent gevent 網路抓取問答

2021-09-08 17:31:57 字數 2556 閱讀 1774

我聽說過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...