python-다선정 소연련2
제목:
1. Lock 버전 생산자와 소비자 모델:
# encoding=utf-8
import threading
import random
import time
#  
gMoney = 1000
gLock = threading.Lock()
gTotalTimes = 0
gTimes = 0
#  :
class Producer (threading.Thread):
    #   run  
    def run(self):
        global gMoney
        global gTimes
        while True:
            money = random.randint(100,1000)
            gLock.acquire()
            if gTimes >= gTotalTimes:
                gLock.release()
                break
            gMoney += money
            # threading.current_thread() : 
            print('%s %d , %d ' %(threading.current_thread(),
                                       money,gMoney))
            gTimes += 1
            gLock.release()
            time.sleep(0.5)
class Consumer (threading.Thread):
    #   run  
    def run(self):
        global gMoney
        while True:
            money = random.randint(100,1000)
            gLock.acquire()
            if gMoney >= money:
                gMoney -= money
                print('%s %d , %d ' %(threading.current_thread(),
                                             money,gMoney))
            else:
                if gTimes >= gTotalTimes:
                    gLock.release()
                    break
                print('%s %d , %d , !' %(threading.current_thread(),
                                                   money,gMoney))
            gLock.release()
            time.sleep(0.5)
def main():
    #  
    for x in range(3):
        t = Consumer(name=" %d"%x)
        t.start()
    #  
    for x in range(5):
       t = Producer(name=" %d"%x)
       t.start()
if __name__ == '__main__':
    main()
2. Condition 버전의 생산자와 소비자 모델:
# encoding=utf-8
import threading
import random
import time
#  
gMoney = 1000
gCondition = threading.Condition()
gTotalTimes = 0
gTimes = 0
#  :
class Producer (threading.Thread):
    #   run  
    def run(self):
        global gMoney
        global gTimes
        while True:
            money = random.randint(100,1000)
            gCondition.acquire()
            if gTimes >= gTotalTimes:
                gCondition.release()
                break
            gMoney += money
            # threading.current_thread() : 
            print('%s %d , %d ' %(threading.current_thread(),
                                       money,gMoney))
            gTimes += 1
            gCondition.notify_all()
            gCondition.release()
            time.sleep(0.5)
class Consumer (threading.Thread):
    #   run  
    def run(self):
        global gMoney
        while True:
            money = random.randint(100,1000)
            gCondition.acquire()
            while gMoney < money:
                if gTimes >= gTotalTimes:
                    gCondition.release()
                    return
                print('%s %d , %d , !' %(threading.current_thread(),
                                                money,gMoney))
                gCondition.wait()
            gMoney -= money
            print('%s %d , %d ' %(threading.current_thread(),
                  money,gMoney))
            gCondition.release()
            time.sleep(0.5)
def main():
    #  
    for x in range(3):
        t = Consumer(name=" %d"%x)
        t.start()
    #  
    for x in range(5):
        t = Producer(name=" %d"%x)
        t.start()
if __name__ == '__main__':
    main()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.