栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python3爬虫lock如何有序的处理多线程?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python3爬虫lock如何有序的处理多线程?

大家肯定在快递很多的时候,在混乱的快递堆里找寻过自己的包裹,其中的困难小编也非常有感悟。同样我们在运行程序时,更倾向于得到排列整齐的结果,这对我们对于数据结果的整理也比较方便。在多线程中就有lock这样的函数,可以帮助我们把数据运行结果清晰的排列出来,那么具体的用法大家一起往下寻找吧。


第一个线程处理好了,结果传递给第二个线程,那么需要“锁住“第一个线程。同时需要共享的内存shared memory。

如果不加任何lock:

# 不加任何处理,同时运行两个线程
import threading
def job1():
    global A
    for i in range(10):
        A += 1
        print("Job1 : ", A)
    
def job2():
    global A
    for i in range(10):
        A += 10
        print("Job2 : ", A)
        
A = 0 # global variable
t1 = threading.Thread(target=job1)
t2 = threading.Thread(target=job2)
t1.start()
t2.start()
t1.join()
t2.join()


运行结果

Job1 :  1
Job1 :  2
Job1 :  3
Job2 :  13Job1 :
Job2 :  24
Job2 :  34
Job2 :  44
Job2 :  54
Job2 :  64
Job2 :  74
Job2 :  84
Job2 :  94
Job2 :  104
 14
Job1 :  105
Job1 :  106
Job1 :  107
Job1 :  108
Job1 :  109
Job1 :  110

这两个线程会同时运行,且打印还比较乱。如果我想先结束job1,再进行job2,那么使用lock——定义一个全局变量lock,同时在每个job中传入lock。从而两者运行就不会相互影响。

 

加上lock

def job1():
    global A, lock
    # 传入全局变量lock,同时通过acquire上锁,通过release解锁。
    lock.acquire()
    for i in range(10):
        A += 1
        print("Job1 : ", A)
    lock.release()
    
def job2():
    global A, lock
    lock.acquire()
    for i in range(10):
        A += 10
        print("Job2 : ", A)
    lock.release()
        
lock = threading.Lock()
A = 0 # global variable
t1 = threading.Thread(target=job1)
t2 = threading.Thread(target=job2)
t1.start()
t2.start()
t1.join()
t2.join()


运行结果

Job1 :  1
Job1 :  2
Job1 :  3
Job1 :  4
Job1 :  5
Job1 :  6
Job1 :  7
Job1 :  8
Job1 :  9
Job1 :  10
Job2 :  20
Job2 :  30
Job2 :  40
Job2 :  50
Job2 :  60
Job2 :  70
Job2 :  80
Job2 :  90
Job2 :  100
Job2 :  110


通过上面两个案例的对比,我们可以清楚的看出使用lock函数后,输出的结果是按顺序整齐的排列下来的,比第一个结果看起来不要方便太多了,是不是非常好用呢?更多Python学习指路:PyThon学习网教学中心。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/11787.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号