【Python】多线程/进程异步编程


前言

本篇文章是笔者在自学Python爬虫相关技术时作的笔记。多线程/进程异步编程的目的在于通过提升CPU的工作效率来提高代码的运行速度。在实际操作时就会发现,Python相关的库和操作系统帮助我们完成了大量的操作,我们只需要指定相关的任务,具体的任务调度不需要开发者关心。这也是使用Python进行异步编程的优势所在。

声明:本文章仅探讨技术,分享相关经验。请勿使用相关技术进行任何违法行为,否则将承担法律责任。

  • Python版本:3.12(基于anaconda)
  • Pycharm版本:2024.1

1 线程和进程

线程可以理解为一个程序中不同的道路,这些不同的道路存在于它所属于的进程中。进程是一个资源消耗单位,对于一个程序来说,在开始运行时它就一定会占用系统中一定的内存,此时它就被赋予一个新名称:进程。一个进程包括加载到内存中的可执行代码,CPU状态,分配给进程的内存区域,打开的文件列表,IO设备。

image-20241118134510684

一个进程相当于一个公司,线程就相当于是公司中的员工。公司可以指定员工的状态,它可以是禁止工作,可以开始工作等,但是公司无法决定员工什么时候工作,工作的效果等。在计算机中,什么时候运行哪个线程由CPU和操作系统决定。

2 多线程和多进程的Python实现

2.1 多线程

from threading import Thread


def func():
    for i in range(100):
        print('msg from func:', i)


if __name__ == '__main__':
    t1 = Thread(target=func)
    t1.start()
    for i in range(100):
        print('msg from main', i)

或者采用面向对象的方法:

from threading import Thread


class MyThread(Thread):
    def run(self):
        for i in range(100):
            print('msg from class MyThread', i)


if __name__ == '__main__':
    t1 = MyThread()
    t1.start()
    for i in range(100):
        print('msg from main', i)

2.2 多进程

from multiprocessing import Process


def func():
    for i in range(100):
        print('msg from func:', i)


if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    for i in range(100):
        print('msg from main', i)

在windows系统中,上面的程序会首先执行主进程,再执行子进程。要想先执行子进程,需要调用子进程的join()方法。

2.3 传递参数

通过Thread类的内置属性args元组传递参数:

from threading import Thread


def func(name):
    for i in range(100):
        print(f'msg from func {
     
     i}, name is {
     
     name}')


if __name__ == '__main__':
    t1 = Thread(target=func, args=('debussy',))  # 传递的参数必须是一个元组,所以要加逗号
    t1.start()
    for i in range(100):
        print('msg from main', i)

通过面向对象的方式传递参数:

from threading import Thread


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

    def run(self):
        for i in range(100):
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Include everything

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

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

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

打赏作者

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

抵扣说明:

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

余额充值