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 属性来代替。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值