[Python_5] Python 執行緒
阿新 • • 發佈:2018-11-09
0. 說明
Python 執行緒筆記
1. 低階 API
# -*-coding:utf-8-*- """ 執行緒 """ """ 低階 API """ import time import _thread def sayHello(str): print(str) try: _thread.start_new_thread(sayHello, ("hello world",)) finally: # 休眠的秒數 time.sleep(5)
2. 高階 API
玩家執行緒
""" 高階 API """ import threading # 玩家類 class Player(threading.Thread): def run(self): print("%s 出發了" % (self.name)) time.sleep(self.time) print("%s 到了" % (self.name)) def __init__(self, name, time): threading.Thread.__init__(self) self.name = name self.time = time p1 = Player("p1", 3) p2 = Player("p2", 1) p3 = Player("p3", 2) p4 = Player("p4", 4) p1.start() p2.start() p3.start() p4.start() p1.join() p2.join() p3.join() p4.join() print("開局!!")
售票問題解決多執行緒安全問題
import threading tickets= 100 # 取票方法,保證執行緒安全性 lock = threading.Lock() def getTicket(): global tickets lock.acquire() tmp = tickets if (tickets > 0): tickets -= 1 lock.release() return tmp else: lock.release() return -1 # 售票員 class Saler(threading.Thread): def run(self): while (True): tmp = getTicket() if tmp != -1: print("%s : %d\r\n" % (self.name, tmp), end="") else: break; def __init__(self, name): threading.Thread.__init__(self) self.name = name s2 = Saler("s2") s1 = Saler("s1") s1.start() s2.start() s1.join() s2.join() print("over")