zoukankan      html  css  js  c++  java
  • 10.22进程互斥锁,队列,堆栈,线程

    进程互斥锁

    让并发变成串行,牺牲了执行效率,保证了数据的安全.
    在程序并发执行时,如果需要修改数据就使用互斥锁.

    mutex = Lock()
    mutex.acquire() #加锁
    mutex.release() #释放锁
    

    队列

    相当于内存中的空间.
    可以存放多个数据,必须排队,遵循先进先出的顺序.

    from multiprocessing import Queue
    #调用队列类,实例化队列对象q
    q = Queue(5) #若传参,队列中就可以存放5个数据
    q = Queue() #若不传参,则队列中可以存放无限个数据
    q.get() #获取数据,队列没有就等待
    q.get_nowait() #获取数据,队列没有就报错
    q.put() #添加数据,队列满了就等待
    q.put_nowait() #添加数据,队列满了就报错
    q.empty() #判断队列是否为空
    q.full() #判断队列是否满了
    

    堆栈

    是和队列相对的,是先进后出.

    IPC

    进程间通信
    进程间的数据是相互隔离的,若想实现进程间的通信,可以利用队列.

    生产者与消费者

    生产者:生产数据
    消费者:使用数据的
    通过队列,生产者把数据添加队列中,消费者从队列中获取数据.

    线程

    什么是线程

    线程与进程都是虚拟单位,目的是为了更好的描述某种事物
    进程:资源单位
    线程:执行单位
    开启一个进程,一定会有一个线程,线程才是真的执行者.

    为什么要使用线程

    节约内存资源
    开启进程:
    开辟一个名称空间,每开启一个进程,都会占用一份内存资源.
    会自带一个线程
    开启线程:
    一个进程可以开启多个线程
    线程的占用的内存远小于进程占用的内存
    注意:线程不能实现并行,线程只能实现并发,进程可以实现并行

    创建线程

    方法一、

    from threading import Thread
    import time
    class MyThread(Thread):
        def __init__(self):
            super().__init__()
        def run(self) -> None:
            print('running...')
            time.sleep(5)
            print('over...')
    if __name__ == '__main__':
        t = MyThread()
        t.start()
        t.join()
        print('主')
    

    方法二、

    from threading import Thread
    import time
    def task():
    	print('开始')
    	time.sleep(5)
    	print('结束')
    if __name__ == '__main__':
    	t = Thread(target=task)
    	t.start()
    	t.join()
    	print('主')
    

    线程使用方法

    t.daemon = True #守护进程
    current_thread().name #获取当前线程对象的名字
    is_alive() #判断线程是否存活
    enumerate() #获取当前线程个数
    

    线程互斥锁

    线程之间数据是共享的,线程互斥锁就是防止多个线程同时读取一个数据.

    from threading import Lock
    mutex = Lock()
    mutex.acquire() #加锁
    mutex.release() #释放锁
    
  • 相关阅读:
    Silverlight 页面导航
    SqlServer中的扩展属性[转]
    一个你不一定知道的CMD命令: start
    手动将Notepad2加入到右键
    ExcelHelper:使用Oledb接口操作Excel的帮助类[原]
    Excel学习笔记 – 区域选择
    SqlMetal自动代码生成
    与System.Diagnostics.Process相关的几个方法
    在Sql Server中附加数据库文件时寻找日志文件的规则
    获取SQL SERVER服务状态及启用的协议
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11721014.html
Copyright © 2011-2022 走看看