单线程的方式
import time
def coding():
for x in range(3):
print("正在写代码%s"%x)
time.sleep(1)
def drawing():
for x in range(3):
print("正在画图%s"%x)
time.sleep(1)
def main():
coding()
drawing()
if __name__ == "__main__":
main()
结果:
正在写代码0
正在写代码1
正在写代码2
正在画图0
正在画图1
正在画图2
# 多线程,相当于平行执行
import time
import threading
def coding():
for x in range(3):
print("正在写代码%s"%x)
time.sleep(1)
def drawing():
for x in range(3):
print("正在画图%s"%x)
time.sleep(1)
def main():
t1 = threading.Thread(target=coding)
t2 = threading.Thread(target=drawing)
t1.start()
t2.start()
if __name__ == "__main__":
main()
结果:
正在写代码0
正在画图0
正在写代码1
正在画图1
正在写代码2
正在画图2
另外的写法多线程
import threading
import time
class CodingThread(threading.Thread):
def run(self):
for x in range(3):
print("正在写代码%s"%threading.current_thread())
time.sleep(1)
class DrawingThread(threading.Thread):
def run(self):
for x in range(3):
print("正在画图%s"%threading.current_thread())
time.sleep(1)
def main():
t1 = CodingThread()
t2 = DrawingThread()
t1.start()
t2.start()
if __name__ == "__main__":
main()
结果:
正在写代码<CodingThread(Thread-21, started 7320)>正在画图<DrawingThread(Thread-22, started 7456)>
正在写代码<CodingThread(Thread-21, started 7320)>
正在画图<DrawingThread(Thread-22, started 7456)>
正在写代码<CodingThread(Thread-21, started 7320)>
正在画图<DrawingThread(Thread-22, started 7456)>
# 锁只用于修改了全局变量的地方,访问的地方不用加锁
import threading
VALUE = 0
gLock = threading.Lock()
def add_value():
global VALUE
######################
gLock.acquire()
for x in range(100000):
VALUE += 1
gLock.release()
#####################
print("value:%d"%VALUE)
def main():
for x in range(2):
t = threading.Thread(target=add_value)
t.start()
if __name__ == "__main__":
main()
结果:
value:100000
value:200000