python-进程与主线程关系

import threading
import time

def action(max):
for i in range(max):
print(threading.current_thread().getName()+" "+str(i))
time.sleep(1) #添加这句与不添加对比分析,会发现主线程的执行是不会等待子线程执行完才执行的。

for x in range(10):
print(threading.current_thread().getName()+" "+str(x))
time.sleep(0.3)
if x == 5: #执行了一次
t1 = threading.Thread(target=action,args=(100,))
t1.start()

print(“进程执行完毕!”)
虽然上面程序只显式创建并启动了两个线程,但实际上程序有三个线程,即程序显式创建的两个子线程和主线程。前面己经提到,当 Python 程序开始运行后,程序至少会创建一个主线程,主线程的线程执行体就是程序中的主程序(没有放在任何函数中的代码)。

在进行多线程编程时,不要忘记 Python 程序运行时默认的主线程,主程序部分(没有放在任何函数中的代码)就是主线程的线程执行体。
从图 1 可以看出,此时程序中共包含三个线程,这三个线程的执行没有先后顺序,它们以并发方式执行:Thread-1 执行一段时间,然后可能 Thread-2 或 MainThread 获得 CPU 执行一段时间,接下来又换其他线程执行,这就是典型的线程并发执行,CPU 以快速轮换的方式在多个线程之间切换,从而给用户一种错觉,即多个线程似乎同时在执行。

通过上面介绍不难看出多线程的意义,如果不使用多线程,主程序直接调用两次 action() 函数,那么程序必须等第一次调用的 action() 函数执行完成,才会执行第二次调用的 action() 函数;必须等第二次调用的 action() 函数执行完成,才会继续向下执行主程序。

而使用多线程之后,程序可以让两个 action() 函数、主程序以并发方式执行,给用户一种错觉,两个 action() 函数和主程序似乎同时在执行。
说穿了很简单,多线程就是让多个函数能并发执行,让普通用户感觉到多个函数似乎同时在执行。
除此之外,上面程序还用到了如下函数和方法:
threading.current_thread():它是 threading 模块的函数,该函数总是返回当前正在执行的线程对象。
getName():它是 Thread 类的实例方法,该方法返回调用它的线程名字。

在 Threading 模块中,除了 current_thread() 函数外,还经常使用如下 2 个函数:
threading.enumerate():返回一个正运行线程的 list。“正运行”是指线程处于“启动后,且在结束前”状态,不包括“启动前”和“终止后”状态。
threading.activeCount():返回正在运行的线程数量。与 len(threading.enumerate()) 有相同的结果。
程序通过 geName() 方法返回指定线程的名字,还可以通过 setName(name) 方法为线程设置名字,这两个方法可通过 name 属性来代替。

你可能感兴趣的:(python)