多线程——Python

利用Python封装好的一个模块threading

1.怎么用?import导入
import threading
import time

# 多线程执行没有先后顺序,CPU随机选择
# 主线程会等待所有子线程死掉,最后自己才死掉


def test01():
    for i in range(5):
        print("我是子线程test01:%s" % (i))
        time.sleep(1)


def test02():
    for i in range(5):
        print("我是子线程test02:%s" % (i))


def main():
    print("hahah")
    t1 = threading.Thread(target=test01)
    t2 = threading.Thread(target=test02)
    t1.start()
    t2.start()
    print("hehe")
    print('23333')


if __name__ == "__main__":
    main()
也可以这样用
import threading
import time


class DouBan(threading.Thread):
    # def __init__(self, name):
    #     self.name = name

    def register(self):
        print("开始注册")

    def login(self):
        print("%s开始登录")

    def exit(self):
        print("正在退出!")

    def run(self):
        self.register()
        self.login()
        self.exit()

def main():
    print("---------正在测试---------")
    t1 = DouBan()
    t1.start()
    print("----------测试结束--------")


if __name__ == "__main__":
    main()

2.多线程共享全局变量带来的问题(如果在同一时间,不同线程都对去全局变量进行更改,到底听谁的?)
用互斥锁解决
import threading

g_num = 0


def test_A():
    global g_num

    for i in range(1000000):
        mutex.acquire()
        g_num += 1
        print("test_A的测试结果:%d" % (g_num))
        mutex.release()


def test_B():
    global g_num

    for i in range(1000000):
        mutex.acquire()
        g_num += 1
        mutex.release()
    print('test_B的测试结果:%d' % (g_num))

# 创建一个互斥锁
# 默认是没上锁状态
mutex = threading.Lock()


def main():
    a = threading.Thread(target=test_A)
    b = threading.Thread(target=test_B)
    a.start()
    b.start()


if __name__ == "__main__":
    main()

互斥锁同样会带来问题:死锁
银行家算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值