关于Python的进程线程协程之threading模块(二)Lock,RLock对象以及Semaphore,BoundedSemaphore对象

本文深入探讨Python的threading模块,重点关注Lock、RLock对象以及Semaphore和BoundedSemaphore的使用。通过多个实例展示它们在处理线程并发时如何确保数据安全,防止脏数据的产生。文中详细阐述了Semaphore和BoundedSemaphore的差异,后者在释放时会检查计数上限,防止溢出。
摘要由CSDN通过智能技术生成

关于Python的进程线程协程之threading模块(二)Lock,RLock对象以及Semaphore,BoundedSemaphore对象

线程锁:由于线程之间是随机调度的,并且每个线程在cpu上只执行指定数量的字节码(100),所以当多个线程同时修改同一条数据时可能会出现脏数据,为了规避这一情况,线程锁应运而生,同一时刻允许一个线程执行操作。

实例一:

无锁情况,在cpu性能不佳的时候容易产生脏数据

# _*_coding:utf-8_*_
import threading
from time import sleep, ctime


maxlink = 10
# A pool of thread maxlink
thread_pool = []
# A pool of thread that save instantiation threads   存放线程实例的线程池
count = 0
# A global var

def loop(index):
    """A function for sleep sometime s """
    print "start loop %s at: " % index, ctime()
    global count
    count += 1
    sleep(2)
    print "end loop %s at: " % index, ctime()

def Thread_Pool(*arg):
    """A function that create and save instantiation
     of threading to thread pool"""
    func, LN = arg
    for i in range(LN):
        t = threading.Thread(target=func, args=(i,))
        thread_pool.append(t)

def Thread_Start(arg):
    """A function that represents a thread of control."""
    for i in range(arg):
        thread_pool[i].start()
    for i in range(arg):
        thread_pool[i].join()

def main():
    """A function of main"""
    print "process start at: ".upper(), ctime()
    Thread_Pool(loop, maxlink)
    Thread_Start(maxlink)
    print "process end at: ".upper(), ctime(), "now count :", count


if __name__ == '__main__':
main()

运行结果:

PROCESS START AT:  Fri Apr 28 16:49:28 2017
start loop 0 at:  Fri Apr 28 16:49:28 2017
start loop 1 at:  Fri Apr 28 16:49:28 2017
start loop 2 at:  Fri Apr 28 16:49:28 2017
start loop 3 at:  Fri Apr 28 16:49:28 2017
start loop 4 at:  Fri Apr 28 16:49:28 2017
start loop 5 at:  Fri Apr 28 16:49:28 2017
start loop 6 at:  Fri Apr 28 16:49:28 2017
start loop 7 at:  Fri Apr 28 16:49:28 2017
start loop 8 at:  Fri Apr 28 16:49:28 2017
start loop 9 at:  Fri Apr 28 16:49:28 2017
end loop 0 at: end loop 2 at: end loop 1 at:    Fri Apr 28 16:49:30 2017Fri Apr 28 16:49:30 2017Fri Apr 28 16:49:30 2017


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JaysenLeo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值