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

本文介绍了Python中多线程的使用,包括通过`threading`模块直接和通过类创建线程,使用`join`方法同步线程,以及线程间的数据共享。还探讨了守护线程的概念,强调主线程会等待非守护线程结束后才结束。
摘要由CSDN通过智能技术生成

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

概念

多线程(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('主线程')

在这里插入图片描述

方法二,用类开

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('主线程')

效果
在这里插入图片描述

引入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)

效果
在这里插入图片描述

守护线程

守护线程是一种特殊的线程,就和它的名字一样,它是系统的守护者,在后台默默完成一些系统性的服务,比如垃圾回收线程,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('主线程')

效果
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰。。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值