# Information Technology
# 摩尔定律 -- 任何买不起的电子产品,在18月后价格会降低一半,甚至更多。
# 原因:电子产品每隔18个月,性能会翻翻。
# 安迪比尔定律:安迪给你的东西,比尔都会给你拿走。硬件性能起来了,但是软件跟不上。
# 所以:当软件更新时,硬件的性能需求将会提升。
# 反摩尔定律:一个IT公司如果今天和18个月前卖掉同样多的、同样的产品,它的营业额就要降一半。IT界把它称为反摩尔定律。
# 线程加锁
import time
from threading import Thread, Lock
class Account(object):
def __init__(self):
self._balance = 0
self._lock = Lock()
@property
def balance(self):
return self._balance
def deposit(self, money):
"""当多个线程同时访问一个资源的时候,就有可能因为竞争资源导致状态崩溃
被多个线程访问的资源,称为临界资源,对临界资源的访问需要加上保护。
"""
if money:
self._lock.acquire() # 加锁,开始是并行,加锁后变成串行,解锁后变成并行。
try:
new_balance = self._balance + money
time.sleep(0.01)
self._balance = new_balance
finally:
self._lock.release()
class AddMoneyThread(Thread):
def __init__(self, account):
super(AddMoneyThread, self).__init__()
self._account = account
def run(self):
self._account.deposit(1)
def main():
account = Account()
tlist = []
for _ in range(100):
t = AddMoneyThread(account)
tlist.append(t)
t.start()
for t in tlist:
t.join()
print('%d元' % account.balance)
if __name__ == '__main__':
main()
五车争霸赛
from random import randint
from threading import Thread
import pygame
import time
class Color(object):
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (242, 242, 242)
@staticmethod
def random_color():
r = randint(0, 255)
g = randint(0, 255)
b = randint(0, 255)
return r, g, b
class Car(object):
def __init__(self, x, y, color):
self._x = x
self._y = y
self._color = color
def move(self):
if self._x <= 870:
self._x += randint(1, 10)
return True
return False
def draw(self, screen):
pygame.draw.rect(screen, self._color, [self._x, self._y, 80, 40], 0)
def main():
class BackgroundThread(Thread):
def run(self):
nonlocal screen
is_go_on = True
while is_go_on:
screen.fill(Color.GRAY)
pygame.draw.line(screen, Color.BLACK, (130, 0), (130, 600), 4)
pygame.draw.line(screen, Color.BLACK, (950, 0), (950, 600), 4)
for car in cars:
car.draw(screen)
pygame.display.flip()
time.sleep(0.05)
for car in cars:
if not car.move():
is_go_on = False
cars = []
for i in range(5):
temp = Car(50, i * 120 + 50, Color.random_color())
cars.append(temp)
pygame.init()
screen = pygame.display.set_mode((1000, 600))
pygame.display.set_caption('五车争霸赛')
BackgroundThread(daemon=True).start()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
if __name__ == '__main__':
main()