记录学习python线程相关的知识,参照菜鸟教程:https://www.runoob.com/python3/python3-multithreading.html
1.调用 _thread 模块中的start_new_thread()函数开启线程
import _thread
import time
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print("%s:%s" % (threadName,time.ctime(time.time())))
try:
_thread.start_new(print_time,("thred-1", 2, ))
_thread.start_new(print_time,("thred-2", 4, ))
except:
print("error : 无法启动线程")
while 1:
pass
2.使用 threading 模块创建线程
import threading
import time
exitFlag = 0
class myThread (threading.Thread):
def __init__(self, thradId, name, count):
threading.Thread.__init__(self)
self.thradId = thradId
self.name = name
self.count = count
def run(self):
print("开始线程" + self.name)
print_time(self.name,self.count, 5)
print("退出线程" + self.name)
def print_time(threadName,delay,counter):
while counter:
if exitFlag:
threadName.exit()
time.sleep(delay)
print("%s:%s" % (threadName, time.ctime(time.time())))
counter -= 1
thrad1 = myThread(1,"thread-1",1)
thrad2 = myThread(2,"thread-1",2)
thrad1.start()
thrad2.start()
thrad1.join()
thrad2.join()
print("退出线程")
线程同步
import threading
import time
class myThread(threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadId = threadID
self.name = name
self.counter = counter
def run(self):
print("开启线程:" + self.name)
# 获取锁,用于线程同步
threadLock.acquire()
print_time(self.name,self.counter,3)
# 释放锁,开启下一个线程
threadLock.release()
def print_time(threadName, delay, counter):
while counter:
time.sleep(delay)
print("%s:%s " % (threadName,time.ctime(time.time())))
counter -= 1
threadLock = threading.Lock()
threas = []
# 创建新线程
thread1 = myThread(1,"Thread-1",1)
thread2 = myThread(2,"Thread-2",2)
# 开启新线程
thread1.start()
thread2.start()
# 添加到线程列表
threas.append(thread1)
threas.append(thread2)
# 等待线程完成
for t in threas:
t.join()
print("退出主线程")