多线程
- 依赖模块:
thread
或者threading
- python3 版本废弃且不推荐使用
thread
,故改名_thread
- 调用方法传参:
args
kwargs
args
:元组传参,只有一个时必须有逗号kwargs
:对象传参,对象的key必须和方法参数名称一致
_thread
(废弃)
语法:
- 导入模块
_thread
- _thread.start_new_thread ( function, args[, kwargs] )
- 代码
# coding=utf8
import _thread
import time
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print("%d %s: %s" % (count, threadName, time.ctime(time.time())))
if __name__ == '__main__':
# 创建线程
try:
_thread.start_new_thread(print_time, ("Thread-1", 1,))
except:
print("Error: unable to start thread")
time.sleep(6)
print('执行完了....')
- 运行
threading
(推荐使用)
简单模式
语法:
- 导入模块
threading
- 创建 => thread = threading.Thread(target,args/kwargs)
- 运行 => thread.start()
- 代码
# 导入线程模块
import threading
import time
def sing(name,age):
print('唱歌者姓名:' + name + ',年龄:' + str(age))
time.sleep(2)
print('正在唱歌...')
def dance(name, age):
print('跳舞者姓名:' + name + ',年龄:' + str(age))
print('正在跳舞...')
if __name__ == '__main__':
# args 元组传参
t1 = threading.Thread(target=sing,args=('Alice', 18))
# kwargs 对象传参
t2 = threading.Thread(target=dance,kwargs={'name': 'Bob', 'age': 18})
t1.start()
t2.start()
- 运行
复杂模式
语法:
- 继承父类threading.Thread
- 重写run方法(run方法的逻辑就是线程要执行的)
- 代码
# coding=utf8
import threading
import time
class myThread(threading.Thread): # 继承父类threading.Thread
def __init__(self, threadID, name, counter, operate):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
self.operate = operate
def run(self): # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
print("Starting " + self.name)
print("开始 " + self.operate)
time.sleep(2)
print("跳舞结束了")
print('Ending ' + self.name)
if __name__ == '__main__':
# 创建新线程
thread1 = myThread(1, "Thread-1", 1,'跳舞')
thread1.start()
time.sleep(3)
print("主程序结束了")
- 运行