并发编程~~~多线程~~~开启线程的两种方式, 线程的其他方法

一 什么是线程

线程是执行程序的最小单位,就像一条流水线工作的过程.

开启一个进程: 在内存中开启一个进程空间,然后将主进程的所有的资源数据复制一份,然后调用线程去执行代码

进程是资源单位,线程是执行单位

二 线程 VS 进程

  1. 开启进程的开销非常大,比开启线程的开销大很多
  2. 开启线程的速度非常快,要快几十倍到上百倍
  3. 线程与线程之间可以共享同一个进程的数据,进程与进程之间需要借助队列等方法实现通信.
  4. 主线程和子线程没有地位之分(没有主次之分),一个主线程结束后要等其他子线程结束后,才能结束本进程.

三 开启线程的两种方式

from threading import Thread
import time
def task(name):
    print(f'{name}is running')
    time.sleep(1)
    print(f'{name}is gone')

if __name__ == '__main__':
    t1 = Thread(target=task,args=('大黑',))
    t1.start()
    print('主线程')
from threading import Thread
import time
class MyThread(Thread):
    def __init__(self,name):
        super().__init__()
        self.name = name

    def run(self):
        print(f'{self.name}is running')
        time.sleep(1)
        print(f'{self.name}is gone')

if __name__ == '__main__':
    t1 = MyThread('大黑')
    t1.start()
    print('主进程')

四 线程的其他方法

from threading import Thread,currentThread,enumerate,activeCount
import os,time
def task():
    print(currentThread())
    time.sleep(1)
    print('666')

if __name__ == '__main__':
    t1 = Thread(target=task,name='线程1')
    t2 = Thread(target=task,name='线程2')
    t1.start()
    t2.start()
    time.sleep(2)
    print(t1.isAlive()) # 判断线程是否活着
    print(t1.getName()) # 获取线程名
    t1.setName('子进程1') # 设置线程名
    print(t1.getName())
    print(currentThread()) # 获取当前线程的对象
    print(enumerate()) # 返回一个列表,包含所有的线程对象
    print(activeCount()) # 返回正在运行的线程数量
    print(f'主线程{os.getpid()}')
posted on 2019-11-05 22:43  Lav3nder  阅读(207)  评论(0编辑  收藏  举报