zoukankan      html  css  js  c++  java
  • python并发编程:多线程-开启线程的两种方式

    一 threading模块介绍

    multiprocess模块完全模仿了threading模块的接口,二者在使用层面,有很大的相似性

    二 开启线程的两种方式

    方式一

    from threading import Thread
    import time
    
    
    def sayhi(name):
        time.sleep(2)
        print("%s say hello" % name)
    
    
    if __name__ == '__main__':
        t = Thread(target=sayhi, args=('mike', ))
        t.start()
        print("主线程")
    

      方式二

    from threading import Thread
    import time
    
    
    class Sayhi(Thread):
        def __init__(self, name):
            super().__init__()
            self.name = name
    
        def run(self):
            time.sleep(2)
            print('%s say hello' % self.name)
    
    
    if __name__ == '__main__':
        t = Sayhi('mike')
        t.start()
        print("主线程")
    

      

    三 练习题

    1、基于多线程实现并发的套接字通信

    客户端:

    from socket import *
    ip = '127.0.0.1'
    port = 8081
    
    c = socket(AF_INET, SOCK_STREAM)
    c.connect((ip, port))
    
    while True:
        msg = input("请输入客户端的信息").strip()
        if not msg:
            continue
    
        c.send(msg.encode('utf-8'))
        data = c.recv(1024)
        print("收到的信息:", data.decode('utf-8'))
    

      

    服务端:

    from socket import *
    from threading import Thread
    
    
    def talk(conn):
        while True:
            try:
                data = conn.recv(1204)
                if not data:
                    break
                conn.send(data.upper())
            except ConnectionResetError:
                break
        conn.close()
    
    
    def server(ip, port):
    
        server_socket = socket(AF_INET, SOCK_STREAM)
    
        server_socket.bind((ip, port))
        server_socket.listen(1)
    
        while True:
            conn, addr = server_socket.accept()
            p = Thread(target=talk, args=(conn,))
            p.start()
        conn.close()
    
    
    if __name__ == '__main__':
        server('127.0.0.1', 8081)
    
  • 相关阅读:
    用nodejs删除mongodb中ObjectId类型数据
    关于easyui模拟win2012桌面的一个例子系列
    div里常用的class命名
    XMLHttpRequest对象中readyState与status的几种常见状态
    我们经常注册用的页面是怎么实现的
    html与xhtml区别
    mysql重置密码
    服务器80端口映射到8080端口
    服务器端增加tomcat使用内存
    更新服务器ssh登录端口
  • 原文地址:https://www.cnblogs.com/mike-liu/p/9279877.html
Copyright © 2011-2022 走看看