zoukankan      html  css  js  c++  java
  • Python:Day27 socketserver、线程

    socketserver模块源码中没找到get_request()的方法,原因????

    服务器端--------------------------------------------------
    import socketserver
    
    
    class MyServer(socketserver.BaseRequestHandler):    # 定义一个类,必须要继承括号中的类
        def handle(self):   # 这个方法名字只能是这个,因为父类中也有这个方法,此处是重写这个方法的。
            # while True:   #这个循环不要加,加了之后意外断开会出问题。
            conn = self.request
            while True:
                try:
                    data = conn.recv(1024)
                except Exception:
                    print("对方意外中断!")
                    break
                if not data:
                    break
                print(str(data, "utf8"))
                inp = input(">>>>:")
                conn.send(bytes(inp, "utf8"))
            conn.close()
    
    
    server1 = socketserver.ThreadingTCPServer(("127.0.0.1", 8000), MyServer)   # 此处容易忘记添加上面定义的类
    server1.serve_forever()
    
    
    
    客户端-------------------------------------------------------------
    import socket
    
    sk = socket.socket()
    ip_port = ("127.0.0.1",8000)
    sk.connect(ip_port)
    
    while True:
        inp = input(">>>>>:")
        if inp == "exit":
            break
        sk.send(bytes(inp, "utf8"))
        data = sk.recv(1024)
        print(str(data, "utf8"))
    sk.close()

    线程:

    计算密集型任务、I/O密集型的任务

    线程的两种创建方法:

    (1)实例化Thread类,传入函数:

    import threading
    
    
    def foo(num):
        print('this is thread %s' % num)
    
    
    t1 = threading.Thread(target=foo(1))
    t2 = threading.Thread(target=foo(2))
    t1.start()    # this is thread 1
    t2.start()    # this is thread 2
    print(t1.getName())    # Thread-1
    print(t2.getName())    # Thread-2

    (2)从Thread派生一个子类,创建这个子类的实例

    import threading
    
    
    class MyThread(threading.Thread):
        def __init__(self, num):
            threading.Thread.__init__(self)
            self.num = num
    
        def run(self):
            print("this is thread %s" % self.num)
    
    
    t1 = MyThread(1)
    t2 = MyThread(2)
    t1.start()    # this is thread 1
    t2.start()    # this is thread 2

    join():在子线程完成运行之前,这个子线程的父线程将一直被阻塞。

    import threading
    import time
    
    
    def music(func):
        for i in range(2):
            print("Begin listening to %s . %s" % (func, time.ctime()))
            time.sleep(1)
            print("end listening  %s" % time.ctime())
    
    
    def movie(func):
        for i in range(2):
            print("Begin watching %s  .  %s" % (func, time.ctime()))
            time.sleep(5)
            print("end watching %s" % time.ctime())
    
    
    threads = []
    t1 = threading.Thread(target=music, args=("七里香",))
    threads.append(t1)
    t2 = threading.Thread(target=movie, args=("阿甘正传",))
    threads.append(t2)
    
    if __name__ == '__main__':
        for t in threads:
            t.start()
        t.join()    # t2进程结束后,主线程才继续执行
        print("all over ..........%s" % time.ctime())

    setDaemon():将线程设置为守护线程,设置为守护线程的线程,它守护着主线程,主进程结束了,它也就结束了。

    import threading
    import time
    
    
    def music(func):
        for i in range(2):
            print("Begin listening to %s . %s" % (func, time.ctime()))
            time.sleep(1)
            print("end listening  %s" % time.ctime())
    
    
    def movie(func):
        for i in range(2):
            print("Begin watching %s  .  %s" % (func, time.ctime()))
            time.sleep(5)
            print("end watching %s" % time.ctime())
    
    
    threads = []
    t1 = threading.Thread(target=music, args=("七里香",))
    threads.append(t1)
    t2 = threading.Thread(target=movie, args=("阿甘正传",))
    threads.append(t2)
    
    if __name__ == '__main__':
        t2.setDaemon(True)  #将t2设置为守护线程,
        for t in threads:
            t.start()
        print("all over ..........%s" % time.ctime())

    Threading的其它方法:

    # threading.currentThread(): 返回当前的线程变量。
    # threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
    # threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
    # 除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
    # run(): 用以表示线程活动的方法。
    # start():启动线程活动。
    # join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
    # isAlive(): 返回线程是否活动的。
    # getName(): 返回线程名。
    # setName(): 设置线程名。
  • 相关阅读:
    通过JavaMail发送(群发)邮件示例(内含附件图片) 代码复制可用
    需要把获取系统的当前时间存入库里 获取时是String类型,库里是Datetime类型 String 转化 Date
    用canvas和原生js写的一个笨鸟先飞的小游戏(暂时只有一个关卡)
    Svg和canvas的区别,伪类选择器有哪些(归类)
    微信web网页动态增减输入框,搜索框,基于jQuery weui、jQuery 实现无限插入数据,动态数据生成,外加高德地图POI和根据坐标获取位置信息的页面
    vue 使用tinymce富文本编辑器
    mamp环境下navicat无法链接本地mysql
    tp5 系统变量输出
    开始项目注意事项
    jQuery weui实现下拉刷新事件
  • 原文地址:https://www.cnblogs.com/sq5288/p/9328979.html
Copyright © 2011-2022 走看看