zoukankan      html  css  js  c++  java
  • python——多线程学习

    import threading
    import time
    import os
    
    #acquire([timeout]): 尝试获得锁定。使线程进入同步阻塞状态。
    #release(): 释放锁。使用前线程必须已获得锁定,否则将抛出异常。
    
    #Lock属于全局,Rlock属于线程。
    # 构造方法: Lock(),Rlock(),推荐使用Rlock()
    
    # Lock对比Rlock
    # import threading
    #
    # lock = threading.Lock()  # Lock对象
    # lock.acquire()
    # lock.acquire()  # 产生了死锁。
    # lock.release()
    # lock.release()
    # print("aaaaaa")
    # lock.acquire()
    #
    # import threading
    #
    # rLock = threading.RLock()  # RLock对象
    # rLock.acquire()
    # rLock.acquire()  # 在同一线程内,程序不会堵塞。
    # rLock.release()
    # rLock.release()
    
    def booth(tid):
        global i
        global lock
        while True:
            lock.acquire()   #使用lock.acquire()获得线程锁。此时,其他的线程就无法再获得该锁了,直到锁被另一个线程释放:lock.release()。
            if i!=0:
                i=i-1
                print ("窗口:",tid,",剩余票数:",i)
                time.sleep(1)
            else:
                print ("Thread_id",tid,"No more tickets")
                os._exit(0)
            lock.release()
            time.sleep(1)
    
    i = 100
    lock=threading.Lock()  #创建线程锁
    
    for k in range(10):
    
        new_thread = threading.Thread(target=booth,args=(k,))  #target: 要执行的方法; args/kwargs: 要传入方法的参数。
        new_thread.start()  #start():  线程准备就绪,等待CPU调度,启动线程。
  • 相关阅读:
    CentOS7.0 内核(3.10.0-123.el7.x86_64)bug导致KVM物理机重启
    Jenkins控制台输出乱码
    MySQL 主从失败报错:Last_SQL_Errno: 1594
    PHP7添加opcache.so模块
    python 网络爬虫requests模块
    Python 运算符
    tmux使用笔记
    linux使脚本在后台运行
    git 使用钩子直接推送到工作目录
    Git使用笔记
  • 原文地址:https://www.cnblogs.com/mentiantian/p/10407344.html
Copyright © 2011-2022 走看看