异步爬虫的补充学习

概述

在之前学习爬虫过程中,视频里讲的不是很完整,导致我学的很懵逼,现在有新的爬虫视频了,所以去重新学习下。

多线程

进程是资源单位,启动某一个程序时默认会有一个进程,每一个进程里至少有一个线程;
线程是执行单位。

先看以下的例子:

def func():
    for i in range(1000):
        print('func', i)


if __name__ == '__main__':
    func()
    for i in range(1000):
        print('main', i)

这一段代码最后会先执行func(),输出func+i,然后再执行main()函数,输出main+i,不是多线程。

想要实现多线程,可以用threading模块来实现

# 多线程
from threading import Thread


def func():
    for i in range(1000):
        print('func', i)


if __name__ == '__main__':
    t = Thread(target=func)  # 创建线程并给线程安排任务
    t.start()  # 开始执行该线程
    for i in range(1000):
        print('main', i)

可以看到在输出结果中,出现了大量排序错乱的问题,这是因为在子线程开始后,父线程继续运行,导致不同步的情况出现。

上面是第一种多线程的写法,还有第二种–继承Thread后重写run()函数

class Mythread(Thread):
    def run(self):
        for i in range(1000):
            print('run', i)


if __name__ == '__main__':
    t = Mythread()
    t.start()
    for i in range(1000):
        print('main', i)

上面是函数无参数的情况,如果有参数,用下面的方法处理

from threading import Thread


def func(name):
    for i in range(1000):
        print(name, i)


if __name__ == '__main__':
    t1 = Thread(target=func, args=('xay',))  # 创建线程并给线程安排任务
    t1.start()  # 开始执行该线程
    t2 = Thread(target=func, args=('why',))
    t2.start()

注意,args=后面必须跟着是元组

多进程

与多线程类似

from multiprocessing import Process


def func():
    for i in range(10000):
        print('func', i)


if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    for i in range(10000):
        print('main', i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lum1n0us

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

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

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

打赏作者

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

抵扣说明:

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

余额充值