python 协程 gevent 简单测试
串行测试
from gevent import monkey; monkey.patch_all()#有IO才做时需要这一句 import gevent import requests,time start=time.time() def f(url): print('GET: %s' % url) resp =requests.get(url) data = resp.text print('%d bytes received from %s.' % (len(data), url)) f('http://127.0.0.1:8001/s') f('http://127.0.0.1:8001/s') f('http://127.0.0.1:8001/s') print("cost time:",time.time()-start) #输入 共用 15s #GET: http://127.0.0.1:8001/s #13 bytes received from http://127.0.0.1:8001/s. #GET: http://127.0.0.1:8001/s #13 bytes received from http://127.0.0.1:8001/s. #GET: http://127.0.0.1:8001/s #13 bytes received from http://127.0.0.1:8001/s. #cost time: 15.034623622894287
并行测试
from gevent import monkey; monkey.patch_all()#有IO才做时需要这一句 import gevent import requests,time start=time.time() def f(url): print('GET: %s' % url) resp =requests.get(url) data = resp.text print('%d bytes received from %s.' % (len(data), url)) gevent.joinall([ gevent.spawn(f, 'http://127.0.0.1:8001/s'), gevent.spawn(f, 'http://127.0.0.1:8001/s'), gevent.spawn(f, 'http://127.0.0.1:8001/s'), ]) print("cost time:",time.time()-start) # 输出 共用5s # GET: http://127.0.0.1:8001/s # GET: http://127.0.0.1:8001/s # GET: http://127.0.0.1:8001/s # 13 bytes received from http://127.0.0.1:8001/s. # 13 bytes received from http://127.0.0.1:8001/s. # 13 bytes received from http://127.0.0.1:8001/s. # cost time: 5.034070014953613
被请求的tornado代码
sleep 5s
#!/bin/env python import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web import tornado.httpclient import tornado.gen from tornado.concurrent import run_on_executor from concurrent.futures import ThreadPoolExecutor import time from tornado.options import define, options define("port", default=8001, help="run on the given port", type=int) class SleepHandler(tornado.web.RequestHandler): executor = ThreadPoolExecutor(4) @tornado.web.asynchronous @tornado.gen.coroutine def get(self): res = yield self.sleep() self.write("when i sleep ") self.finish() @run_on_executor def sleep(self): time.sleep(5) return 5 if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[ (r"/s", SleepHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
相关推荐
efeve 2020-09-14
ericxieforever 2020-09-03
Dimples 2020-06-08
鲁鲁酱 2020-06-02
feishicheng 2020-05-31
paopao00 2020-05-10
georgeandgeorge 2020-05-09
Greatemperor 2020-05-03
jacktangj 2020-04-17
CloudXli 2020-04-07
oXiaoChong 2020-04-07
学习备忘录 2020-02-18
wyqwilliam 2020-02-10
PythonMaker 2020-01-19
ddxygq 2019-12-30
shengge0 2019-12-26
sschencn 2019-12-19
SDUTACM 2019-12-09
千锋 2019-12-07
Laozizuiku 2019-12-04
mayflowers 2019-11-18
wklken的笔记 2019-11-01