外部结束指定线程
def test(x,y):
t= threading.currentThread()
# 这里的参数相当于是线程的一个属性
while getattr(t, "flag", True):
print(x)
time.sleep(1)
if __name__ == "__main__":
x = 1
y = 2
# args的值最好后面添加一个逗号
t = threading.Thread(target=test, args=(x,y,))
t.start()
time.sleep(5)
t.flag = False
多线程之间的资源共享
1、可以使用线程锁完成不同线程间公共资源的互斥访问,如下程序所示。这里的t就是锁,相当于是一个mutex资源,不同线程之间进行PV操作。
2、也可以使用t.join()来让不同线程之间线性执行,不过这种方式就和只有一个进程的效果一样,不好使。可以看下面join()的说明
import threading
import time
def doit(a, data):
global t
t.acquire()
while True:
a[0] = data
print(a)
# t.release()
if __name__ == "__main__":
tmp = [0]
t = threading.Lock()
t1 = threading.Thread(target=doit, args=(tmp, 1,))
t1.start()
t2 = threading.Thread(target=doit, args=(tmp, 2,))
t2.start()
while True:
pass
threading中join()的理解
1、join()用来阻塞进程,只有在两个线程都执行完以后才执行主进程
import threading
import time
def doit(a, data):
a[0] = data
print(a)
time.sleep(2)
if __name__ == "__main__":
tmp = [0]
# t = threading.Lock()
t = []
t1 = threading.Thread(target=doit, args=(tmp, 1,))
t.append(t1)
t2 = threading.Thread(target=doit, args=(tmp, 2,))
t.append(t2)
for each in t:
each.start()
for each in t:
each.join()
print(4)
while True:
pass
2、用来阻塞其他线程
import threading
import time
def doit(a, data):
a[0] = data
print(a)
time.sleep(2)
if __name__ == "__main__":
tmp = [0]
# t = threading.Lock()
t = []
t1 = threading.Thread(target=doit, args=(tmp, 1,))
t.append(t1)
t2 = threading.Thread(target=doit, args=(tmp, 2,))
t.append(t2)
for each in t:
each.start()
each.join()
print(4)
while True:
pass