Python线程锁

简介:

多线程适用于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


线程的共享内存

线程缺点是有一个线程崩溃时所有剩余线程均会崩溃

例子:

#线程共享内存

import threading

def worker(l):

    l.append("a")

    l.append("b")

    l.append("c")

if __name__ == "__main__":

    l = list()

    l += xrange(1,6)

    print (l)

    t = threading.Thread(target=worker, args=(l,))

    t.start()

    print (l)

输出:

a1 b2 c3

a4 b5 c6



线程池

例子:

#此包为第三方包,需要使用pip安装

import threadpool

 

def test1(a, b, c):

    print("a{0} b{1} c{2}".format(a, b, c))

 

if __name__ == "__main__":

    #the way one

    lst_vars_1 = ['1', '2', '3']

    lst_vars_2 = ['4', '5', '6']

    func_var = [(lst_vars_1, None), (lst_vars_2, None)]

 

    # the way two

    dict_vars_1 = {'a':'1', 'b':'2', 'c':'3'}

    dict_vars_2 = {'a':'4', 'b':'5', 'c':'6'}

    func_var = [(None, dict_vars_1), (None, dict_vars_2)]

 

    pool1 = threadpool.ThreadPool(2)

    request = threadpool.makeRequests(test1, func_var)

    [pool1.putRequest(req) for req in request]

    pool1.wait()



本文转自 粗粮面包 51CTO博客,原文链接:http://blog.51cto.com/culiangmianbao/2050447,如需转载请自行联系原作者

相关文章
|
13天前
|
Java 程序员 开发者
深入理解Java并发编程:线程同步与锁机制
【4月更文挑战第30天】 在多线程的世界中,确保数据的一致性和线程间的有效通信是至关重要的。本文将深入探讨Java并发编程中的核心概念——线程同步与锁机制。我们将从基本的synchronized关键字开始,逐步过渡到更复杂的ReentrantLock类,并探讨它们如何帮助我们在多线程环境中保持数据完整性和避免常见的并发问题。文章还将通过示例代码,展示这些同步工具在实际开发中的应用,帮助读者构建对Java并发编程深层次的理解。
|
13天前
|
Linux API C++
c++多线程——互斥锁
c++多线程——互斥锁
|
18天前
|
安全
python_threading多线程、queue安全队列
python_threading多线程、queue安全队列
21 2
|
1天前
|
安全 调度 Python
探索Python中的并发编程:协程与多线程的比较
本文将深入探讨Python中的并发编程技术,重点比较协程与多线程的特点和应用场景。通过对协程和多线程的原理解析,以及在实际项目中的应用案例分析,读者将能够更好地理解两种并发编程模型的异同,并在实践中选择合适的方案来提升Python程序的性能和效率。
|
3天前
|
安全 Java
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
|
4天前
|
安全 Java 程序员
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)
8 0
|
4天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
12 1
|
5天前
|
消息中间件 程序员 调度
Python并发编程:利用多线程提升程序性能
本文探讨了Python中的并发编程技术,重点介绍了如何利用多线程提升程序性能。通过分析多线程的原理和实现方式,以及线程间的通信和同步方法,读者可以了解如何在Python中编写高效的并发程序,提升程序的执行效率和响应速度。
|
6天前
|
算法 安全 Linux
【探索Linux】P.20(多线程 | 线程互斥 | 互斥锁 | 死锁 | 资源饥饿)
【探索Linux】P.20(多线程 | 线程互斥 | 互斥锁 | 死锁 | 资源饥饿)
11 0
|
14天前
|
消息中间件 安全 算法
通透!从头到脚讲明白线程锁
线程锁在分布式应用中是重中之重,当谈论线程锁时,通常指的是在多线程编程中使用的同步机制,它可以确保在同一时刻只有一个线程能够访问共享资源,从而避免竞争条件和数据不一致性问题。