诚意
诚意如你,当一诚的态度对待

导航

 

 一:多线程网络编程

  模板:


import socketserver
 
class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        pass
 
server = socketserver.ThreadingTCPServer(('192.168.13.84',8001,),MyServer)
server.serve_forever()

 

案例:多线程

1 import socketserver
 2 
 3 class Myserver(socketserver.BaseRequestHandler):
 4     def handle(self):# 方法名是固定的

 5         # 字节类型    #self.request等价于conn
 6         while 1:
 7             # 针对window系统
 8             try:
 9                 print("等待信息")
10                 data = self.request.recv(1024)  # 阻塞
11                 # 针对linux
12                 if len(data) == 0:
13                     break
14                 if data == b'exit':
15                     break
16                 response = data + b'SB'
17                 self.request.send(response)
18             except Exception as e:
19                 break
20 
21         self.request.close()
22 
23 
24 # 1 创建socket对象 2 self.socket.bind()  3 self.socket.listen(5)
25 server=socketserver.ThreadingTCPServer(("127.0.0.1",8899),Myserver)
26 
27 server.serve_forever()  # 用于   accept() 等待连接

 客户端

 1 import socket
 2 
 3 sk = socket.socket()
 4 
 5 sk.connect(('127.0.0.1',8899))
 6 
 7 while 1:
 8     name = input(">>>>:")
 9     sk.send(name.encode('utf-8')) # 字节
10 
11     response = sk.recv(1024) # 字节
12     print(response.decode('utf-8'))

 

二:多线程网络编程

案例1:

 1 #多线程
 2 import threading
 3 import time
 4 
 5 def task(a1,a2,a3):
 6     time.sleep(2)
 7     print('拿快递')
 8 def play():
 9     print('和女朋友去耍')
10 def wm():
11     print('去拿外卖')
12 
13 # 创建一个线程
14 # 让该线程去执行任务:函数
15 t1 = threading.Thread(target=task,args=(1,2,3,))   # args=(1,2,3,)对应task中的参数
16 # 去执行吧
17 t1.start()
18 
19 
20 # 创建一个线程
21 # 让该线程去执行任务:函数
22 t2 = threading.Thread(target=play)
23 # 去执行吧
24 t2.start()
25 
26 # 创建一个线程
27 # 让该线程去执行任务:函数
28 t3 = threading.Thread(target=wm)
29 # 去执行吧
30 t3.start()
31 
32 print('玩扇子')
33 print('煽风点火')
34 print('耍贱...')
35 
36 #3个子线程1个主线程
View Code

 

 

案例2:

 1 import time
 2 
 3   import threading
 4 
 5   
 6 
 7   def task(n):
 8 
 9     print('开始执行任务:',n)
10 
11     time.sleep(10)
12 
13     print('...')
14 
15     print('任务%s 执行完毕:'%n)
16 
17   
18 
19   while True:
20 
21     name = input("请输入任务:")
22 
23     t = threading.Thread(target=task,args=(name,))
24 
25     t.start()
View Code 

案例3:线程与socket

 1 import time
 2 
 3 import socket
 4 
 5 import threading
 6 
 7  
 8 
 9 def task(conn):
10 
11     time.sleep(20)
12 
13     data = conn.recv(1024)
14 
15     print(data)
16 
17     conn.close()
18 
19  
20 
21 server = socket.socket()
22 
23 server.bind(('192.168.13.84',8001,))
24 
25 server.listen(5)
26 
27  
28 
29 while True:
30 
31     conn,addr = server.accept()
32 
33     t = threading.Thread(target=task,args=(conn,))
34 
35     t.start()
View Code

 

案例4:利用requests/uuid第三方模块从网站上下载多个图片

 

 1 # 案例3:利用requests第三方模块从网站上下载多个图片
 2 '''
 3 pip3 install requests
 4 '''
 5 
 6 import threading
 7 import requests
 8 import uuid   #随机生成字符串
 9 url_list = [
10             'https://img01.sogoucdn.com/app/a/100520024/924055f74736446fb5253068062585c0',
11             'https://img01.sogoucdn.com/app/a/100520024/f4d580ab0d9f5d514c9471b23bba0561',
12             ]
13 def task(url):
14     """
15         1. DNS解析,根据域名解析出IP
16         2. 创建socket客户端    sk = socket.socket()
17         3. 向服务端发起连接请求 sk.connect()
18         4. 发送数据(我要图片) sk.send(...)
19         5. 接收数据            sk.recv(8096)
20 
21         接收到数据后写入文件。
22         """
23     ret = requests.get(url)
24     file_name = str(uuid.uuid4()) + '.jpg'
25     with open(file_name,mode='wb') as f:
26         f.write(ret.content)
27 
28 for url in url_list:
29     t = threading.Thread(target=task,args=(url,))
30     t.start()
View Code 
posted on 2018-09-05 21:26  诚意  阅读(171)  评论(0)    收藏  举报