[Python_5] Python 线程

本文深入探讨Python线程的使用,包括低级API的_thread模块应用,高级API的threading模块特性,通过具体实例如玩家线程和售票问题,展示如何解决多线程安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 

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

 


 

转载于:https://www.cnblogs.com/share23/p/9822214.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值