Python
创建多线程-随笔
_thread
模块函数式创建线程threading
模块函数式创建线程threading
类创建线程_thread
模块函数式创建线程【说明】
_thread
模块中的start_new_thread()
函数来产生新线程;【函数】
_thread.start_new_thread ( function, args[, kwargs] )
《参数说明》
function
:线程函数。args
:传递给线程函数的参数,必须是个tuple
类型。kwargs
:可选参数。【示例】
《代码01》
# -*- coding:utf-8 -*-
import _thread
import time
def a(p):
for i in range(5):
print(p)
time.sleep(0.5)
def b(p):
for i in range(5):
print(p)
time.sleep(0.2)
if __name__ == '__main__':
_thread.start_new_thread(a, ('我是线程A',))
_thread.start_new_thread(b, ('我是线程B',))
while True:
pass
《结果01》
我是线程A
我是线程B
我是线程B
我是线程B
我是线程A
我是线程B
我是线程B
我是线程A
我是线程A
我是线程A
Process finished with exit code -1
【说明】
【示例】
《代码01》
# encoding:utf-8
import threading
import time
import random
def run(sec):
time.sleep(sec)
print('当前线程的名字是: ', threading.current_thread().name)
if __name__ == '__main__':
print('这是主线程:', threading.current_thread().name)
thread_list = []
'''创建多个线程'''
for i in range(5):
t = threading.Thread(target=run, args=(random.random(),))
thread_list.append(t)
# 循环这5个线程,调用相应的run方法
for t in thread_list:
t.start()
《结果01》
这是主线程: MainThread
当前线程的名字是: Thread-2 (run)
当前线程的名字是: Thread-4 (run)
当前线程的名字是: Thread-3 (run)
当前线程的名字是: Thread-5 (run)
当前线程的名字是: Thread-1 (run)
Process finished with exit code 0
threading
类创建线程【说明】
threading.thread
,再重载成员函数run
,程序处理的代码写在函数run
中,最后再调用start()
方法来运行线程【示例】
《代码01》
# -*- coding:utf-8 -*-
import threading
import time
class A(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for i in range(5):
print('我是线程A', threading.current_thread().getName())
time.sleep(0.5)
class B(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
for i in range(5):
print('我是线程B', threading.current_thread().name)
time.sleep(0.2)
t1 = A()
t1.start()
t2 = B()
t2.start()
《结果01》
我是线程A Thread-1
我是线程B Thread-2
D:\MY_APP\Project\PythonProject\DuoXianCheng\deom.py:18: DeprecationWarning: getName() is deprecated, get the name attribute instead
print('我是线程A', threading.current_thread().getName())
我是线程B Thread-2
我是线程B Thread-2
我是线程A Thread-1
我是线程B Thread-2
我是线程B Thread-2
我是线程A Thread-1
我是线程A Thread-1
我是线程A Thread-1
Process finished with exit code 0
《注释01》
threading.current_thread().getName()
threading.current_thread().name
threading
和thread
的使用总结:threading
是对thread
模块的再封装threading
模块支持守护线程threading.Thread(target,args)
创建线程,但没有启动线程start()
开启线程join()
挂起线程_thread.start_new_thread()
方法不仅创建了线程而且启动了线程