zoukankan      html  css  js  c++  java
  • 多进程

    解决线程间资源争夺问题的另一种方法:互斥锁

    #创建锁
    mutex = threading.Lock()
    # 锁定
    mutex.acquire()
    # 释放
    mutex.release()

    死锁:当互斥锁使用不当时有可能产生死锁
    例:

    #导入模块
    import threading
    # 互斥锁
    lock = threading.Lock()
    # 获取列表中的元素
    def get_value(index):
    my_list = [1, 2, 3, 4, 5]
    # print("线程", index)
    # 同一时间只有一个线程通过下标读取数据操作
    lock.acquire()
    # 判断是否列表越界
    if index >= len(my_list):
    print("列表越界:", index)
    lock.release()
    """
    如果这里不写解锁的话,会导致线程一直处于锁死状态,形成死锁
    """
    return
    # 通过下标获取列表中的元素
    print(my_list[index])
    lock.release()
    if __name__ == '__main__':
    # 定义10个线程 执行get_value
    for i in range(10):
    # 创建一个子线程
    sub_thread = threading.Thread(target=get_value, args=(i,))
    # 启动下
    sub_thread.start()




    多进程完成多任务(进程的创建与线程类似)

    import multiprocessing, time
    def work1():
    for i in range(15):
    # 运行状态
    print("工作1....")
    # 等待状态
    time.sleep(0.1)
    def work2():
    for i in range(15):
    print("工作2....")
    time.sleep(0.1)
    if __name__ == '__main__':
    
    # 创建两个子进程完成各自的任务
    # 新建状态
    work1_process = multiprocessing.Process(target=work1)
    work2_process = multiprocessing.Process(target=work2)
    # 启动进程 就绪状态
    work1_process.start()
    work2_process.start()



    多线程的使用格式

    查看当前进程:multiprocessing.current_process()
    查看当前进程ID:multiprocessing.current_process().pid
    查看当前进程ID:os.getpid()
    查看父进程ID:os.getppid()
    主进程守护:work_process.daemon = True

    多个进程对全局变量的操作时相对独立的,不会相互影响
    多进程和多线程的区别:
    多进程在某个进程崩溃时不会影响其他进程的运行
    多项成在某个线程崩溃后整个程序就终止了

    创建一个消息队列
    # Queue(x) 可以存放x个元素 如果什么也不写 可以随意添加
    queue = multiprocessing.Queue(3)

    添加数据
    queue.put(数据)

    获取元素(先进先出)
    queue.get()

  • 相关阅读:
    MySQL 获得 当前日期时间 函数
    07/26/2019 00:38:17 INFO macOS users need to install XQuartz. See https://support.apple.com/en-gb/HT201341
    ModuleNotFoundError: No module named 'pynvx'
    ModuleNotFoundError: No module named 'cv2'
    ModuleNotFoundError: No module named 'tqdm'
    WARNING: You are using pip version 19.1.1, however version 19.2.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
    多进程和多线程的理解
    python 装饰器demo
    python 日志内容提取
    python 中 list 去重复
  • 原文地址:https://www.cnblogs.com/zc2018/p/8834995.html
Copyright © 2011-2022 走看看