#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import threading
import asyncio
import datetime
URL = "http://news.sina.com.cn/"
#方式一: tornado AsyncHTTPClient
from tornado.httpclient import AsyncHTTPClient
async def yield_func(url= URL ):
beg = datetime.datetime.now()
for index in range(100):
http_client = AsyncHTTPClient()
#body = await http_client.fetch(url) #此方法会导致串行执行请求
http_client.fetch( URL , lambda x: print( datetime.datetime.now() -beg ) )
#print (len(body.body))
print( "tornado end: {0}".format( datetime.datetime.now() -beg ) )#此结束时间没有意义
from tornado.ioloop import IOLoop
from tornado.ioloop import PeriodicCallback
from tornado.concurrent import Future
from tornado import gen
#yield_func() #wrong method
IOLoop.current().run_sync(yield_func )
IOLoop.current().start()
## 方式二: gevent + requests
import requests
def myget():
global URL
rsp = requests.get(URL)
#print ( len(rsp.content) )
import gevent
from gevent import monkey
monkey.patch_all()
beg = datetime.datetime.now()
pids =[]
for i in range(100):
pid = gevent.spawn (myget )
pids.append(pid)
gevent.joinall( pids)
print( "gevent last: {0}".format( datetime.datetime.now() -beg ) )
#方式三: 完全串行执行 requests
beg = datetime.datetime.now()
for i in range(100):
myget()
print( "sync last: {0}".format( datetime.datetime.now() -beg ) )
转载于:https://my.oschina.net/cppblog/blog/537210