1. Python中的线程
Thread类
t = threading.Thread(target=None,name=None,args=(),kwargs=None,*,daemin=None)
target:线程调用的对象,目标函数
name:线程的名字,可以重名
args:目标函数传参,元祖
kwargs:传递关键字参数,字典
1 | import threading |
welcome mykernel
therad over
welcome mykernel......
therad over ..........
welcome mykernel
therad over
welcome mykernel......
therad over ..........
welcome mykernel
therad over
welcome mykernel......
therad over ..........
python线程的没有特定的退出方法,
常见的退出:
- 线程函数内语句执行完成
- 线程函数中抛出未处理的异常
1 | import threading |
welcome mykernel
welcome mykernel
welcome mykernel
welcome mykernel
welcome mykernel
Exception in thread w1:
Traceback (most recent call last):
File "/root/.pyenv/versions/3.7.3/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/root/.pyenv/versions/3.7.3/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-9-0fc2f50f7f96>", line 11, in worker
raise Exception("count大于4异常")
Exception: count大于4异常
Python中的线程无优先级和线程组概念,不能被销毁、停止、挂起和恢复。
1. Thread传入参数
1 | import threading |
welcome mykernel
welcome mykernel
welcome mykernel
welcome mykernel
welcome mykernel
Exception in thread w1:
Traceback (most recent call last):
File "/root/.pyenv/versions/3.7.3/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/root/.pyenv/versions/3.7.3/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "<ipython-input-4-36a6bbbdc89d>", line 11, in worker
raise Exception("count大于4异常")
Exception: count大于4异常
2. threading的属性和方法
current_thread():返回当前线程对象
main_thread():返回主线程对象
active_thread():当前处于alive状态的线程个数
enumerate():返回所有活着的线程的列表,不包含已经终止和未开始的线程
get_ident():返回当前线程id飞0整数
1 | import threading |
<_MainThread(MainThread, started 140182288873280)>
<Thread(w1, started 140181357197056)>
<_MainThread(MainThread, started 140182288873280)>
6
[<_MainThread(MainThread, started 140182288873280)>, <Thread(Thread-2, started daemon 140181894067968)>, <Heartbeat(Thread-3, started daemon 140181885675264)>, <HistorySavingThread(IPythonHistorySavingThread, started 140181860497152)>, <ParentPollerUnix(Thread-1, started daemon 140181851318016)>, <Thread(w1, started 140181357197056)>]
T.... [<_MainThread(MainThread, started 140182288873280)>, <Thread(Thread-2, started daemon 140181894067968)>, <Heartbeat(Thread-3, started daemon 140181885675264)>, <HistorySavingThread(IPythonHistorySavingThread, started 140181860497152)>, <ParentPollerUnix(Thread-1, started daemon 140181851318016)>, <Thread(w1, started 140181357197056)>] /n
welcome mykernel
welcome mykernel
welcome mykernel
welcome mykernel
welcome mykernel
3. thread实例的属性和方法
name :名字标识,可以重名,使用getName(),setName()获取和设置
ident:线程id,是非0 整数,线程启动后才有id,否则为None,线程退出,此id依然可以访问,id可以重复使用
is_alive() 返回线程是否活着
1 | import threading |
MainThread
139942493099840
MainThread
139942493099840
MainThread
139942493099840
MainThread
139942493099840
MainThread
139942493099840
worker 139941778028288 dead
worker 139941778028288 dead
worker 139941778028288 dead
start() 启动线程,每一个线程必须且只能执行一次该方法
run() 运行线程函数