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()

  • 相关阅读:
    ASC1 C New Year Bonus Grant
    CodeForces 180C Letter
    Codeforces 71C Round Table Knights
    GCPC2014 J Not a subsequence
    treeview自动从表中添加标题和列值做目录的方法2
    delphi学习treeview中从表列名和数据添加为目录并双击自动选中
    对一个表中所有列数据模糊查询adoquery
    单击dbgrid列标题排序 升降序
    从右键菜单里粘贴复制的工资到数据库里
    如何从右键弹出菜单中清空删除数据加清空前提问确定
  • 原文地址:https://www.cnblogs.com/zc2018/p/8834995.html
Copyright © 2011-2022 走看看