python初识线程threading

#!/usr/bin/python

# -- coding: utf-8 --

# @Time : 2019/8/5 13:43

# @Author : lin

# @File : demo1.py

# @Software: PyCharm

import threading

import time

def say():

print(“hhhhh\t”)

time.sleep(1)

if name == ‘main’:

for i in range(5):

t = threading.Thread(target=say) #say()调用函数,say找到函数地址

t.start()

# 第二种方法 类(封装,继承,多态) 适合线程复杂情况

class MyThread(threading.Thread):

def run(self): #必须写

for i in range(3):

time.sleep(1)

print(“sdasa”)

self.login()

def login(self):

print(“login…”)

if name ==“main”:

t = MyThread()

t.start() #不是t.run()方法,start()自动调用run()

t.login() #对象里的一个方法

#全局变量,要修改变量还是修改其空间中的数据

num = 100

nums = [11,2]

def test():

global num

num +=100

print(num)

def test2():

nums.append(111)

# nums=nums+[111] error

print(nums)

print(num)

print(nums)

test()

test2()

muns =[11,22]

mun =100

def test(req):

global mun

mun +=1

print(mun)

req.append(33)

print(str(req))

def test1():

print(mun)

print(muns) #共享

def main():

t1=threading.Thread(target=test,args=(muns,))

t2=threading.Thread(target=test1)

t1.start()

time.sleep(1)

t2.start()

time.sleep(1)

print(mun) #子线程共享全局变量

if name == ‘main’:

main()

#共享全局变量会引起资源竞争,应用lock锁

#方法 1.创建互斥锁 2.上锁(成功或者阻塞) 3.解锁

g_num = 0

mutex = threading.Lock()

def test1(num):

global g_num

mutex.acquire()

for i in range(num):

g_num +=1

mutex.release()

# for i in range(num):

# mutex.acquire()

# g_num += 1

# mutex.release()

print("----%d"%g_num)

def test2(num):

global g_num

mutex.acquire()

for i in range(num):

g_num+=1

mutex.release()

# for i in range(num):

# mutex.acquire()

# g_num += 1

# mutex.release()

print("----%d"%g_num)

def main():

t1 =threading.Thread(target=test1,args=(1000000,))

t2 =threading.Thread(target=test2,args=(1000000,))

t1.start() #----1209445 ----1000000

t2.start() # ----1558667 ----2000000

time.sleep(4)

if name == ‘main’:

main()

print(g_num)

#互斥锁会产生死锁,故1.银行家算法 2.添加超时时间(超时终止)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值