首页 > 编程语言 > 详细

python中多线程

时间:2021-08-25 23:43:25      阅读:25      评论:0      收藏:0      [点我收藏+]

join和lock的区别:

  1. join()表示要堵塞主线程直到这个线程完成,并不影响子线程的同时进行只是代表在join()后边的语句必须等待join的这个线程完成才能执行:join()并不能阻止各个线程互相干涉。
  2.  lock()则表示要阻止线程同时访问相同的共享数据来防止线程相互干扰,所以线程只能一个一个执行,不能同时进行。使用lock()使得线程只能一个一个进行。

lock使用方法:

lock在不同线程使用同一共享内存时,能够确保线程之间互不影响,使用lock的方法是, 在每个线程执行运算修改共享内存之前,执行lock.acquire()将共享内存上锁, 确保当前线程执行时,内存不会被其他线程访问,执行运算完毕后,使用lock.release()将锁打开, 保证其他的线程可以使用该共享内存。

join()使用方法:

def thread_job():
    print(‘T1 start\n‘)
    for i in range(10):
        time.sleep(0.1)
    print(‘T1 finish\n‘)

add_thread=threading.Thread(target=thread_job,name=‘T1‘)
add_thread.start()
add_thread.join() #用来控制,当T1这个任务执行完之后,才能进行其他的任务。
print(‘all done\n‘)

join和lock区别:
import threading

def job1():
    global A, lock 
    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()

if __name__ == ‘__main__‘:
    lock = threading.Lock()
    A = 0
    t1 = threading.Thread(target=job1)
    t2 = threading.Thread(target=job2)
    t1.start()
    t2.start()
    t1.join()
    t2.join()

 #如果不加入lock,输出的可能是

job1

job2 11
job2 21
job2 31
job2 41
job2 51
job2 61
job2 71
job2 81
job2 91
job2 101
job1 102
job1 103
job1 104
job1 105
job1 106
job1 107
job1 108
job1 109
job1 110

加上lock之后,会在执行完join1之后,才会执行join2

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

莫烦多线程教程:https://mofanpy.com/tutorials/python-basic/threading/lock/

python中多线程

原文:https://www.cnblogs.com/t-zing/p/15187161.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!