zoukankan      html  css  js  c++  java
  • 用多线程,实现并发,TCP

    首先,开启新的线程,是不会新开辟内存空间的,即,子线程和主线程 都在同一个进程里,也就是主进程里,用os.pid(),os.ppid()

    服务器:
    方式一:Thread实例化

    def task(conn, addr):
        # print(os.getpid())
        # print(os.getppid())
        # print(current_thread().name)
        # print(current_thread().is_alive())
        # print(active_count())
        while True:
            try:
                data = conn.recv(1024)
                if not data:
                    print('连接已断开')
                    break
                print('收到客户端%s第一条信息%s' % (conn, addr))
                print('信息为:%s' % data.decode('utf-8'))
                conn.send('good'.encode('utf-8'))
            except Exception:
                print('连接已断开')
                break
    
    
    #
    #
    #
    if __name__ == '__main__':
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.bind(('127.0.0.1', 6666))
        server.listen(5)
        while True:
            conn, addr = server.accept()
            # print(os.getpid())
            # print(os.getppid())
            t1 = Thread(target=task, args=(conn, addr))
            t2 = Thread(target=task, args=(conn, addr))
            t1.start()
            t2.start()
    

    服务端:
    方式二:自定义子类,继承Thread,__init__可以添加新的属性,要在run里,实现你的一些函数,把参数传进去。更新,其实不写run也可以,子类中没有,弗雷中有,把run去掉后,发现运行正常。其实,__init__方法,没有添加,任何自定义属性,那就和父类Thread完全一样了,,,

    def task(conn, addr):
        # print(os.getpid())
        # print(os.getppid())
        # print(current_thread().name)
        # print(current_thread().is_alive())
        # print(active_count())
        while True:
            try:
                data = conn.recv(1024)
                if not data:
                    print('连接已断开')
                    break
                print('收到客户端%s第一条信息%s' % (conn, addr))
                print('信息为:%s' % data.decode('utf-8'))
                conn.send('good'.encode('utf-8'))
            except Exception:
                print('连接已断开')
                break
    
    class Mythread(Thread):
        def __init__(self, task, args):
            super().__init__(target=task, args=args)
    
        def run(self):
            task(conn, addr)
    
    
    if __name__ == '__main__':
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.bind(('127.0.0.1', 6666))
        server.listen(5)
        while True:
            conn, addr = server.accept()
            t1 = Mythread(task=task, args=(conn, addr))
            t1.start()
    
    
  • 相关阅读:
    Task的使用
    WinStore之Application Data
    WinStore控件之Button、HyperlinkButton、RadioButton、CheckBox、progressBar、ScrollViewer、Slider
    WinStore控件之TextBox
    WinStore控件之TextBlock
    WinStore控件之Button
    设计模式之单例模式
    WinStore开发知识导航集锦
    WindowsStore页面导航
    导出程序界面(UI)到图片
  • 原文地址:https://www.cnblogs.com/pythonwl/p/12771520.html
Copyright © 2011-2022 走看看