python学习笔记,爬虫相关,线程

本文为了说明例子,用中文作为变量写在了程序里面,一般编程最好不要那么写

本文目录

    • 概念
    • 开启多线程的方式
    • 引入join方法
    • 注意,同一个进程下多线程数据是共享的
    • 其他方法
    • 守护线程

概念

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。

开启多线程的方式

方法一,直接开

from multiprocessing import Process
from threading import Thread
import time


def task(函数变量):
    print('%s正在运行'%函数变量)
    time.sleep(1)
    print('%s运行结束'%函数变量)



t = Thread(target=task,args=('BOSS',))

t.start()
print('主线程')

python学习笔记,爬虫相关,线程_第1张图片

方法二,用类开

from threading import Thread
import time


class MyThead(Thread):
    def __init__(self, 函数变量):

        super().__init__()
        self.函数变量 = 函数变量

    def run(self):
        print('%s正在运行'%self.函数变量)
        time.sleep(2)
        print('BOSS')


if __name__ == '__main__':
    t = MyThead('BOSS')
    t.start()
    print('主线程')

效果
python学习笔记,爬虫相关,线程_第2张图片

引入join方法

主线程等待子线程运行结束再执行

from threading import Thread
import time


def task(函数变量):
    print('%s 正在运行'%函数变量)
    time.sleep(3)
    print('%s运行结束'%函数变量)


if __name__ == '__main__':
    t = Thread(target=task,args=('BOSS',))
    t.start()
    t.join()  # 主线程等待子线程运行结束再执行
    print('主线程')

效果
在这里插入图片描述

注意,同一个进程下多线程数据是共享的

举例

from threading import Thread
import time


等待被剥削的资金 = 100000


def task():
    global 等待被剥削的资金
    等待被剥削的资金 = 200
    print(等待被剥削的资金)


if __name__ == '__main__':
    t = Thread(target=task)
    t.start()
    t.join()
    print(等待被剥削的资金)

效果
在这里插入图片描述

其他方法

from threading import Thread, active_count, current_thread
import os,time


def 要执行的函数(n):

    print('正在执行',current_thread().name)#获取当前线程的名字
    time.sleep(n)


if __name__ == '__main__':
    A = Thread(target=要执行的函数,args=(1,))
    A1 = Thread(target=要执行的函数,args=(0.1,))
    A.start()
    A1.start()
    A.join()
    print('主线程',active_count())# 统计当前正在活跃的线程数
    print('主线程',os.getpid())#输出当前线程的线程号
    print('主线程',current_thread().name)

效果
python学习笔记,爬虫相关,线程_第3张图片

守护线程

守护线程是一种特殊的线程,就和它的名字一样,它是系统的守护者,在后台默默完成一些系统性的服务,比如垃圾回收线程,JIT线程就可以理解为守护线程。
与守护线程相对的是用户线程,用户线程可以认为是系统的工作线程,它会完成这个程序要完成的业务员操作。如果用户线程全部结束,则意味着这个程序无事可做。守护线程要守护的对象已经不存在了,那么整个应用程序就应该结束。

主线程运行结束之后不会立刻结束 会等待所有其他非守护线程结束才会结束,因为主线程的结束意味着所在的进程的结束

代码实现

from threading import Thread
import time


def 要执行的函数(函数变量):
     print('%s正在运行'%函数变量)
     time.sleep(1)
     print('%s运行结束'%函数变量)


if __name__ == '__main__':
    t = Thread(target=要执行的函数,args=('BOSS',))
    t.daemon = True#设为守护线程
    t.start()
    print('主线程')

效果
在这里插入图片描述

你可能感兴趣的:(python,package,计算机网络原理,爬虫学习笔记,python,爬虫,后端,数据结构)