今日概要

  1、线程

  2、协程

  3、socketserver

  4、基于udp的socket(见第八节)

一、线程

  1、threading模块

    第一种方法:实例化 

import threading
import time

#第一种方法实例化
def sayhi(num):
    print('running on num %s' %(num))
    time.sleep(3)


if __name__ == '__main__':
    t1 = threading.Thread(target=sayhi,args=(1,))  #实例化线程
    t2 = threading.Thread(target=sayhi, args=(1,))

    t1.start()  #执行start方法
    t2.start()
    print(threading.active_count())  #统计线程数量
    print(t1.getName())
    print(t2.getName())

    第二种方法类的继承

import threading
import time

#第二种方法类的继承

class MyThread(threading.Thread):
    def __init__(self,num):
        super().__init__()
        self.num = num

    def run(self):
        print('running on num %s' % (self.num))
        print('start time : %s'%(time.time()))
        time.sleep(3)
        print('end time : %s'%(time.time()))
if __name__ == '__main__':
    t1 = MyThread(1)
    t2 = MyThread(2)
    t1.start()
    t2.start()

python自动化开发-[第十天]-线程、协程、socketserver

  2、在一个进程下开启多个线程与在一个进程下开启多个子进程的区别

    谁的开启速度快? 开启线程的速度快

from threading import Thread
from multiprocessing import Process


def talk(name):
    print ('%s is talking' %name)



if __name__ == '__main__':
    t = Thread(target=talk,args=('dragon',))
    t.start()
    print ('主线程')

    '''
    输出:
    dragon is talking
    主线程
    '''
    p = Process(target=talk,args=('dragon',))
    p.start()
    print('主线程')
    '''
    输出:
    主线程
    dragon is talking
    '''

    看一看pid? 线程的pid和当前进程一样,进程的pid各自独立

from threading import Thread
from multiprocessing import Process
import os

def talk():
    print ('%s is talking' %os.getpid())



if __name__ == '__main__':
    t = Thread(target=talk)
    t1 = Thread(target=talk)
    t.start()
    t1.start()
    print('主线程pid: %s' %os.getpid())

    '''
    21592 is talking
    21592 is talking
    主线程pid: 21592
    '''

    p = Process(target=talk)
    p1 = Process(target=talk)
    p.start()
    p1.start()
    print('主线程pid: %s' % os.getpid())
    
    '''
    主线程pid: 21724
    21460 is talking
    20496 is talking
    '''
from socket import *
from threading import Thread

def server(ip,port):
    s = socket(AF_INET,SOCK_STREAM)
    s.bind((ip,port))
    s.listen(5)
    while True:   #链接循环变成多线程
        conn,addr = s.accept()
        t = Thread(target=talk,args=(conn,addr))
        t.start()

def talk(conn,addr):
    '''通信循环'''
    try:
        while True:
            res = conn.recv(1024)
            if not res :break
            print('client %s:%s msg:%s' % (addr[0], addr[1], res))
            conn.send(res.upper())
    except Exception:
        pass

    finally:
        conn.close()
if __name__ == '__main__':
    server('127.0.0.1',9999)
多线程服务端

相关文章:

  • 2022-02-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2022-12-23
  • 2021-09-10
  • 2022-12-23
猜你喜欢
  • 2021-12-23
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
  • 2021-11-01
  • 2021-11-01
相关资源
相似解决方案