1.socket发送请求

 1 #发送请求的方式
 2
 3 #方式一
 4 import requests
 5
 6 ret = requests.get("https://www.baidu.com/s?wd=abc")
 7
 8 print(ret.text)
 9
10
11 #方式二
12
13 import socket
14
15 client = socket.socket()
16 client.connect(("www.baidu.com",80))
17 client.sendall(b"GET /s?wd=alex HTTP/1.0\r\nhost:www.baidu.com\r\n\r\n")
18 chunk_list = []
19 while True:
20     chunk = client.recv(8096)
21     if not chunk:
22         break
23     chunk_list.append(chunk)
24
25 body = b"".join(chunk_list)
26 print(body.decode("utf-8"))

  单线程的并发

 1 import socket
 2 import select
 3
 4 client1 = socket.socket()
 5 client1.setblocking(False)#百度创建链接:非阻塞
 6
 7 try:
 8     client1.connect(("www.baidu.com",80))
 9 except BlockingIOError as e:
10     pass
11
12 client2 = socket.socket()
13 client2.setblocking(False)
14
15 try:
16     client2.connect(("www.baidu.com",80))
17 except BlockingIOError as e:
18     pass
19
20 client3 = socket.socket()
21 client3.setblocking(False)
22
23 try:
24     client3.connect(("www.baidu.com",80))
25 except BlockingIOError as e:
26     pass
27
28 socket_list = [client1,client2,client3]
29 conn_list = [client1,client2,client3]
30
31 while True:
32     rlist,wlist,elist = select.select(socket_list,conn_list,[],0.005)
33     for sk in wlist:
34         if sk == client1:
35             sk.sendall(b'GET /s?wd=alex HTTP/1.0\r\nhost:www.baidu.com\r\n\r\n')
36         elif sk == client2:
37             sk.sendall(b'GET /web?query=fdf HTTP/1.0\r\nhost:www.sogou.com\r\n\r\n')
38         else:
39             sk.sendall(b'GET /s?wd=alex HTTP/1.0\r\nhost:www.oldboyedu.com\r\n\r\n')
40         conn_list.remove(sk)
41     for sk in rlist:
42         chunk_list = []
43         while True:
44             try:
45                 chunk = sk.recv(8096)
46                 if not chunk:
47                     break
48                 chunk_list.append(chunk)
49             except BlockingIOError as e:
50                 break
51         body = b"".join(chunk_list)
52
53         sk.close()
54         socket_list.remove(sk)
55     if not socket_list:
56         break

2.协程

 1 import greenlet
 2
 3 def f1():
 4     print(111)
 5     g2.switch()
 6     print(222)
 7     g2.switch()
 8
 9 def f2():
10     print(333)
11     g1.switch()
12     print(444)
13
14 g1 = greenlet.greenlet(f1)
15 g2 = greenlet.greenlet(f2)
16 g1.switch()

协程的IO切换

 1 from gevent import monkey
 2 monkey.patch_all()
 3 import requests
 4 import gevent
 5
 6 def get_page1(url):
 7     ret = requests.get(url)
 8     print(url,ret.content)
 9
10 def get_page2(url):
11     ret = requests.get(url)
12     print(url,ret.content)
13
14 def get_page3(url):
15     ret = requests.get(url)
16     print(url,ret.content)
17
18 gevent.joinall(
19       gevent.spawn(get_page1,'https://www.python.org/'),
20       gevent.spawn(get_page2, 'https://www.yahoo.com/'),
21       gevent.spawn(get_page3, 'https://github.com/')
22
23 )

转载于:https://www.cnblogs.com/s593941/p/9643246.html

socket发送请求,协程相关推荐

  1. python_21_线程+进程+协程

    python_线程_进程_协程 什么是线程? -- os能够进行运算调度的最小单位,被包含在进程之中,是一串指令的集合 -- 每个线程都是独立的,可以访问同一进程下所有的资源 什么是进程? -- 每个 ...

  2. 基于协程的并发框架orchid简介

    2019独角兽企业重金招聘Python工程师标准>>> orchid简介 什么是orchid? orchid是一个构建于boost库基础上的C++库,类似于python下的geven ...

  3. 【Python】【容器 | 迭代对象 | 迭代器 | 生成器 | 生成器表达式 | 协程 | 期物 | 任务】...

    Python 的 asyncio 类似于 C++ 的 Boost.Asio. 所谓「异步 IO」,就是你发起一个 IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. Asyn ...

  4. Python协程深入理解

    从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数. yield在协程中的用法: 在协程中yield通常出现在表达式的右边,例如:datum = yield,可以产出值,也可以不产 ...

  5. 夜来风雨声,Python协程知多少

    最近有很多的同学问,大家都知道多线程,多进程,那么这个协程有什么什么东西?难不成还是携程旅游(此处没有广告费)?能不能说一下Python协程,而且最好要讲清楚! 那行,今天将来讲解一下Python协程 ...

  6. 第 十七 章迭代器、生成器和经典协程

    当我在自己的程序中看到模式时,我认为这是一个麻烦的迹象.程序的形状应该只反映它需要解决的问题.代码中的任何其他规律性都表明,至少对我来说,我对抽象的理解还不够深--通常是我手动完成的事情,本应该通过写 ...

  7. Kotlin 协程使用

    文章目录 协程 概述 依赖库 创建协程 通用工具 GlobalScope.launch runBlocking CoroutineScope.launch launch async / await C ...

  8. python模拟多线程http请求_用python实现自己的http服务器——多进程、多线程、协程、单进程非堵塞版、epoll版...

    了解http协议 http请求头 GET / HTTP/1.1 Host: www.baidu.com Connection: keep-alive Pragma: no-cache Cache-Co ...

  9. mysql逻辑架构连接池_GitHub - zzjzzb/ycsocket: 基于swoole的socket框架,支持协程版MySQL、Redis连接池、Actor模型...

    ycsocket 基于 swoole 和 swoole_orm 的 websocket 框架,各位可以自己扩展到 TCP/UDP,HTTP. 在ycsocket 中,采用的是全协程化,全池化的数据库. ...

最新文章

  1. 关于SAP Commerce Cloud OCC API url里不包含user信息的问题
  2. 原生JDBC和工具类的基本实现
  3. opencv之namedWindow,imshow出现两个窗口
  4. frame中src怎么设置成一个变量_OpenCV图像人脸检测及视频中的人脸检测(附源码)...
  5. 全球互联网大面积瘫痪不再是虚幻
  6. 师大校园网迅雷解封软件 之 配置QQ旋风2
  7. 浅谈算法和数据结构: 八 平衡查找树之2-3树
  8. java在线反编译class文件
  9. 栅栏密码及其变形W型栅栏密码
  10. [TIPTOP] 鼎捷ERP開發小撇步 - 編譯程式碼 及 畫面檔 一次到位的方法
  11. Outlook的服务器设置中POP3协议,在outlook的服务器设置中POP3协议是指
  12. 最优传输理论与计算 ——雷娜 顾险峰 【新书发布】
  13. 服务器数据库只读怎么修改权限,设置mysql数据库为只读权限
  14. python zipfile 压缩文件夹的方法
  15. Java bean中字段命名潜规则,前两个字母要么都大写,要么都小写
  16. 【操作系统】I/O系统
  17. 项目需求和产品需求_项目需求和你
  18. bga焊盘怎么做_焊接焊盘和BGA设计规则
  19. 有特别有创意的网站设计案例
  20. 安徽师范大学计算机学院在哪个校区,2021年安徽师范大学皖江学院有几个校区,大一新生在哪个校区...

热门文章

  1. 创建ACCESS数据库,并且创建表和数据。重点:关闭ACCESS数据库引用
  2. 第二十六节(对象流,File类)
  3. 【工作笔记】没有界面程序调用ActiveX控件
  4. [算法 笔记]堆排序(续)
  5. 44 | 套路篇:网络性能优化的几个思路(下)
  6. python 逐行读取csv_Python逐行写入CSV
  7. jupyter ipython display_Tensorflow从jupyter / Ipython运行动画
  8. mysql case函数吗_mySQL case函数
  9. 后端用python还是php_【后端开发】2019学python还是php
  10. python2默认编码_解决Python2.x编码之殇