转-python异步IO-asyncio
原文连接 http://blog.chinaunix.net/uid-190176-id-4223282.html
import argparse
import asyncio
import functools
import logging
import random
import urllib.parse loop = asyncio.get_event_loop() @asyncio.coroutine
def print_http_headers(no, url, keepalive):
url = urllib.parse.urlsplit(url)
wait_for = functools.partial(asyncio.wait_for, timeout=3, loop=loop)
query = ('HEAD {url.path} HTTP/1.1\r\n'
'Host: {url.hostname}\r\n'
'\r\n').format(url=url).encode('utf-8') rd, wr = yield from wait_for(asyncio.open_connection(url.hostname, 80))
while True:
wr.write(query) while True:
line = yield from wait_for(rd.readline())
if not line: # end of connection
wr.close()
return no
line = line.decode('utf-8').rstrip()
if not line: # end of header
break
logging.debug('(%d) HTTP header> %s' % (no, line)) yield from asyncio.sleep(random.randint(1, keepalive//2)) @asyncio.coroutine
def do_requests(args):
conn_pool = set()
waiter = asyncio.Future() def _on_complete(fut):
conn_pool.remove(fut)
exc, res = fut.exception(), fut.result()
if exc is not None:
logging.info('conn#{} exception'.format(exc))
else:
logging.info('conn#{} result'.format(res)) if not conn_pool:
waiter.set_result('event loop is done') for i in range(args.connections):
fut = asyncio.async(print_http_headers(i, args.url, args.keepalive))
fut.add_done_callback(_on_complete)
conn_pool.add(fut)
if i % 10 == 0:
yield from asyncio.sleep(0.01) logging.info((yield from waiter)) def main():
parser = argparse.ArgumentParser(description='asyncli')
parser.add_argument('url', help='page address')
parser.add_argument('-c', '--connections', type=int, default=1,
help='number of connections simultaneously')
parser.add_argument('-k', '--keepalive', type=int, default=60,
help='HTTP keepalive timeout')
args = parser.parse_args() logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')
loop.run_until_complete(do_requests(args))
loop.close() if __name__ == '__main__':
main()
- # ../sbin/nginx
- # ps ax | grep nginx
- 2007 ? Ss 0:00 nginx: master process ../sbin/nginx
- 2008 ? S 0:00 nginx: worker process
- $ python asyncli.py http://10.211.55.8/ -c 10000
- # tail -1000000 access.log | awk '{ print $4 }' | sort | uniq -c | awk '{ cnt+=1; sum+=$1 } END { printf "avg = %d\n", sum/cnt }'
- avg = 548
- VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 657m 115m 3860 R 60.2 6.2 4:30.02 python
- 54208 10m 848 R 7.0 0.6 0:30.79 nginx
转-python异步IO-asyncio的更多相关文章
- Python异步IO --- 轻松管理10k+并发连接
前言 异步操作在计算机软硬件体系中是一个普遍概念,根源在于参与协作的各实体处理速度上有明显差异.软件开发中遇到的多数情况是CPU与IO的速度不匹配,所以异步IO存在于各种编程框架中,客户端比如浏览 ...
- python异步IO编程(一)
python异步IO编程(一) 基础概念 协程:python generator与coroutine 异步IO (async IO):一种由多种语言实现的与语言无关的范例(或模型). asyncio ...
- python异步IO编程(二)
python异步IO编程(二) 目录 开门见山 Async IO设计模式 事件循环 asyncio 中的其他顶层函数 开门见山 下面我们用两个简单的例子来让你对异步IO有所了解 import asyn ...
- Python异步IO
在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了. 我们可以使用多线程或者多进程来并发执行代码,为多个用户服务. 但是,一旦线程数量过多,CPU的时间就花在线程切换 ...
- python -- 异步IO 协程
python 3.4 >>> import asyncio >>> from datetime import datetime >>> @asyn ...
- Python异步IO之协程(一):从yield from到async的使用
引言:协程(coroutine)是Python中一直较为难理解的知识,但其在多任务协作中体现的效率又极为的突出.众所周知,Python中执行多任务还可以通过多进程或一个进程中的多线程来执行,但两者之中 ...
- Python - 异步IO\数据库\队列\缓存
协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,协程一定是在单线程运行的. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和 ...
- Python 异步IO、IO多路复用
事件驱动模型 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- python 异步IO
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143208573 ...
- python 异步IO( asyncio) 协程
python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...
随机推荐
- SSM整合(1): spring 与 springmvc 整合
久没有写博客了, 今年事情太多了, 也没了心思. 去深圳出差, 更重要的结婚的事情, 一茬接一茬. 好在最近闲暇一些, 就想记录一些曾经困扰过我的问题(现在用spring boot真是太方便了, 很 ...
- 第4章 Selenium2-java WebDriver API (一)
4.1 从定位元素开始 WebDriver提供了八种元素定位方: 在Java语言中对应的定位方法: ·id findElement(By.id()) ·name findEleme ...
- .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时(翻译)
.Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...
- Spark2.1.0模型设计与基本架构(上)
随着近十年互联网的迅猛发展,越来越多的人融入了互联网——利用搜索引擎查询词条或问题:社交圈子从现实搬到了Facebook.Twitter.微信等社交平台上:女孩子们现在少了逛街,多了在各大电商平台上的 ...
- 1.1 PIL:Python图像处理类库
from PIL import Image img = Image.open('Husky.jpg') # 看看这货长什么样子 img # 看看它的大小 print('The size of this ...
- Pycharm---新建文件时 自动添加作者时间等信息
可用的变量有: $ {PROJECT_NAME} - 当前项目的名称. $ {NAME} - 在文件创建过程中在“新建文件”对话框中指定的新文件的名称. $ {USER} - 当前用户的登录名. $ ...
- ASP.NET MVC应用程序播放AVI视频
前面Insus.NET实现一系列在MVC应用程序播放SWF, FLV, WMV, RM, RMVB视频.每篇使用不同的方法方式,大同小异.这篇中,为了MVC应用程序播放AVI视频,用纯M, V, C来 ...
- VS2010 调试C++项目 fatal error LNK1123 错误解决办法
最近用VS2010写C++项目,奇怪的是每次生成解决方案都有一个fatal error LNK1123错误,提示生成失败.查阅资料总结解决方案如下: (1)项目——>属性——>连接器——& ...
- NPOI 之导入导出
转自https://www.cnblogs.com/zuowj/archive/2015/05/04/4475663.html转别人的,做了一点点改动 using NPOI.HSSF.UserMode ...
- c# 检查目录,当指定目录不存在时建立目录
/// <remark> /// 检查目录,当指定目录不存在时建立目录 /// </remark> public static void CheckFolder(string ...