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

  • 相关阅读:
    多西:一个创立了Twitter与Square的程序员
    越狱黑客Comex结束苹果实习生涯 将专注学校学习生活
    关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法
    如何更改VS2010的[默认开发语言]默认环境设置
    TRULY Understanding ViewState exactl
    .net平台下xml操作
    正则表达式学习2
    正则表达式学习3
    petshop 出现没有为 SQL 缓存通知启用数据库“MSPetShop4”
    利用ashx以XML返回的形式和ajax实现表格的异步填充
  • 原文地址:https://www.cnblogs.com/zc2018/p/8834995.html
Copyright © 2011-2022 走看看