学习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")

 

posted @ 2017-03-24 14:53  python-残阳  阅读(161)  评论(0)    收藏  举报