学习python-day8
socketserver、多线程、多进程
socketserver
服务端 import socketserver class MyTCPHandler(socketserver.BaseRequestHandler): def handle(self): while True: self.data=self.request.recv(1024).strip() print(self.client_address) print(self.data) self.request.send(self.data.upper()) if __name__ == "__main__": HOST,PORT = "localhost",9000 server = socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler) server.serve_forever()
#客户端 import socket client = socket.socket() client.connect(("localhost",9000)) while True: msg = input(">>>:") if len(msg) == 0:continue client.send(msg.encode()) data = client.recv(1024) print(data.decode())
线程
import threading import time def run(n): time.sleep(1) print("thread:",n) print(threading.current_thread())#打印当前运行的线程实例 for i in range(10): t = threading.Thread(target= run,args=(i,)) t.start() # t.setName("t-",i)#修改线程名 print(t.getName())#打印线程默认的名 print("--------->") print(threading.active_count())#统计当前运行的线程个数
import threading import time #以类的方式启动线程 # class MyThread(threading.Thread): # def __init__(self,num): # threading.Thread.__init__(self) # self.num = num # def run(self):#每个进程要运行的函数 # time.sleep(1) # print("running on number:%s" % self.num) # if __name__ == "__main__": # t1 = MyThread(1) # t2 = MyThread(2) # t1.start() # t2.start() # print("---->")
守护线程
import threading import time def run(n): time.sleep(1) print("thread",n) for i in range(10): t = threading.Thread(target=run,args=(i,)) t.setDaemon(True)#设置子线程为守护线程(当主线程结束后子线程也跟着结束) t.start() print("----->")#不等待子线程,自己运行完就结束
线程池
from concurrent.futures import ThreadPoolExecutor import time def task(agr): time.sleep(2) print(agr) pool = ThreadPoolExecutor(3) for i in range(10): pool.submit(task,i)
#实例二: from concurrent.futures import ThreadPoolExecutor import requests#第三方模块,用于下载的 def task(url): response=requests.get(url) print("得到结果:",url,response) url_list= [ "http://www.oldboyedu.com", "http://www.baidu.com", "http://autohome.com.cn" ] pool = ThreadPoolExecutor(2) for url in url_list: print("开始请求:",url) pool.submit(task,url)
#实例三: from concurrent.futures import ThreadPoolExecutor import requests#第三方模块,用于下载的 def txt(fu):#回调函数 res = fu.result()#获取download函数的结果也就是response print(res.status_code)#打印结果中的状态码 def download(url): response = requests.get(url) return response url_list= [ "http://www.oldboyedu.com", "http://www.baidu.com", "http://autohome.com.cn", ] pool = ThreadPoolExecutor(2) for url in url_list: print("开始请求:", url) fu = pool.submit(download,url)#fu 就是download函数执行的结果,里面包含内容、状态码等(类似一个实例) fu.add_done_callback(txt)#拿到结果后再去调用txt函数
进程
from multiprocessing import Process import time def task(agr): time.sleep(1) print(agr) if __name__ == '__main__': for i in range(10): p = Process(target=task,args=(i,)) p.daemon = True#设置为守护进程,主进程不等子进程,默认为False p.start() p.join(1) print("主进程中的主线程-----end")