首页 > 编程语言 > 详细

Python线程锁

时间:2017-12-14 03:14:24      阅读:253      评论:0      收藏:0      [点我收藏+]
多线程适用于IO密集型,多线程实现方式有两种,详见下方例子

例子:

import threading

class MyThread(threading.Thread):

    def __init__(self, args):

        #使用super写法,按照父类.方法的方式直接重写

        super(MyThread, self).__init__()

        self.args = args

    def run(self):

        print ("start MyThread {0}".format(self.args))

def worker(n):

    print ("start worker{0}".format(n))

if __name__ == "__main__":

    #同多进程使用方法

    for i in xrange(1, 6):

        #使用threading.Thread指定函数和参数,多线程执行

        t1 = threading.Thread(target=worker, args=(i,))

        #开始多线程执行

        t1.start()

    t1.join()

    #重写threading.Thread中的run方法实现多线程

    for x in xrange(6, 11):

        t2 = MyThread(x)

        t2.start()

    t2.join()

输出:

start worker1

start worker2

start worker3

start worker4

start worker5

start MyThread 6

start MyThread 7

start MyThread 8

start MyThread 9

start MyThread 10

多线程锁

多线程锁的两种写法,详见下面两个例子

例子:

import threading

import time

def worker(name, lock):

    #with写法会自动获得锁并自动释放锁,与

    with lock:

        print ("start {0}".format(name))

        time.sleep(2)

        print ("end {0}".format(name))

if __name__ == "__main__":

    #锁的实例化

    lock = threading.Lock()

    t1 = threading.Thread(target=worker, args=("worker1", lock))

    t2 = threading.Thread(target=worker, args=("worker2", lock))

    t1.start()

    t2.start()

    print ("main end")

输出:

start worker1

main end

end worker1

start worker2

end worker2

例子:

import threading

import time

def worker(name, lock):

    #获取线程锁

    lock.acquire()

    #捕获异常

    try:

        print ("start {0}".format(name))

        time.sleep(2)

        print ("end {0}".format(name))

    except Exception as e:

        raise e

    finally:

        #释放线程锁

        lock.release()

if __name__ == "__main__":

    #锁的实例化

    lock = threading.Lock()

    t1 = threading.Thread(target=worker, args=("worker1", lock))

    t2 = threading.Thread(target=worker, args=("worker2", lock))

    t1.start()

    t2.start()

    print ("main end")

输出:

start worker1

main end

end worker1

start worker2

end worker2


Python线程锁

原文:http://blog.51cto.com/culiangmianbao/2050447

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