没有比脚更长的路,没有比人更高的山,没有做不到的事,只有想不到的人。阻挡你前进的不是高山大海,而往往是自己鞋底一粒小小的沙粒!
心态决定苦与乐,观念决定成与败!

总结:
- 进程管理:现代操作系统必须实现进程管理;不同操作系统实现进程管理是由差异的;
- Python中关于线程的概念能简化就简化了,不像其他语言中要学习那么多;没有close\exit等方法;
- Python中传参数是 单个参数args 是元组(5,)
1. 进程与线程
线程:操作系统能够进行运算调度的最小单位。它被包含在进程中,是进程中的实际运作单位。是一串指令的集合;
一个线程指的是进程中一个单一顺序的控制流,一个进程是中可以并发多个线程,每个线程并行执行不同的任务进程:以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理,网络接口的调用等,对各种资源管理的集合,就可以称为进程
进程要操作cpu,必须先创建一个线程,所有在同一个进程里的线程是共享同一块内存空间的注意:
1.进程本身不能够执行
2.进程和线程不能比较谁快谁慢,两个没有可比性,进程是资源的集合,线程是真正执行任务的,进程要执行任务也要通过线程;
3.启动一个线程比启动一个进程快进程和程序的关系
程序是源代码编译后的文件,而这些文件存放在磁盘上。当程序被操作系统加载到内存中,就是进程,进程中存放着指令和数据(资源),它也是线程的容器。
Linux进程有父进程、子进程,Windows的进程是平等关系。
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。
一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。
在许多系统中,创建一个线程比创建一个进程快10-100倍。
进程、线程的理解
现代操作系统提出进程的概念,每一个进程都认为自己独占所有的计算机硬件资源。
进程就是独立的王国,进程间不可以随便的共享数据。
线程就是省份,同一个进程内的线程可以共享进程的资源,每一个线程拥有自己独立的堆栈。
2. 线程的状态
状态 | 含义 |
---|---|
就绪(Ready) | 线程能够运行,但在等待被调度。可能线程刚刚创建启动,或刚刚从阻塞中恢复,或者被 |
其他线程抢占 | |
运行(Running) | 线程正在运行 |
阻塞(Blocked) | 线程等待外部事件发生而无法运行,如I/O操作 |
终止 | 线程完成,或退出,或被取消 |

3. Python中的进程和线程
进程会启动一个解释器进程,线程共享一个解释器进程。
4. Python的线程开发
Python的线程开发使用标准库threading
Thread类
# 签名
def \__init__(self, group=None, target=None, name=None,args=(), kwargs=None, *, daemon=None)
参数名 | 含义 |
---|---|
target | 线程调用的对象,就是目标函数 |
name | 为线程起个名字 |
args | 为目标函数传递实参,元组 |
kwargs | 为目标函数关键字传参,字典 |
线程启动
import threading
import time
# 最简单的线程程序
def worker():
time.sleep(1)
print("I'm working")
print('Fineshed')
t = threading.Thread(target=worker, name='worker') # 线程对象
t.start() # 启动
#-------------------------------------------------
I'm working
Fineshed
通过threading.Thread创建一个线程对象,target是目标函数,name可以指定名称。
但是线程没有启动,需要调用start方法。
线程之所以执行函数,是因为线程中就是执行代码的,而最简单的封装就是函数,所以还是函数调用。
函数执行完,线程也就退出了。
那么,如果不让线程退出,或者让线程一直工作怎么办呢 ? while True;
import threading
import time
def worker():
while True:
time.sleep(1)
print("I'm working")
print('Fineshed')
t = threading.Thread(target=worker, name='worker') # 线程对象
t.start() # 启动
#-------------------------------------------------------------------------------------------
线程退出
Python没有提供线程退出的方法,线程在下面情况时退出
1、线程函数内语句执行完毕
2、线程函数中抛出未处理的异常
# 1、线程函数内语句执行完毕 :循坏退出
import threading
import time
def worker():
count = 0
while True:
time.sleep(1)
print("I'm working")
print('Fineshed')
count += 1
if count > 5:
break
# return
t = threading.Thread(target=worker, name='worker') # 线程对象
t.start() # 启动
print('--end--')
#--------------------------------------------------------------------------------------------
--end--
I'm working
Fineshed
I'm working
Fineshed
I'm working
Fineshed
I'm working
Fineshed
I'm working
Fineshed
I'm working
Fineshed
# 2、线程函数中抛出未处理的异常
import threading
import time
def worker():
count = 0
while True:
time.sleep(1)
print("I'm working")
print('Fineshed')
count += 1
if count > 5:
raise Exception('Thread error!')
t = threading.Thread(target=worker, name='worker') # 线程对象
t.start() # 启动
print('--end--')
#----------------------------------------------------------------------------------
Exception: Thread error!
Python的线程没有优先级、没有线程组的概念,也不能被销毁、停止、挂起,那也就没有恢复、中断了。
线程的传参
线程传参和函数传参没什么区别,本质上就是函数传参
要么args ; 要么kwargs ;
import threading
import time
def worker(x,y):
count = 0
while True:
time.sleep(1)
print("I'm working")
print('Fineshed')
count += 1
if count > x:
break
#t = threading.Thread(target=worker, name='worker',args=(5,100)) # 线程对象 args
t = threading.Thread(target=worker, name='worker',kwargs={'x':5,'y':100}) # 线程对象 kwarsg
t.start() # 启动
print('--end--')
网友评论