python 归纳 (十一)_线程_threading.Thread

总结:

  1. 默认父线程跑完,子线程并不会马上退出,不像 thread.start_threadXXXX
  2. 父线程跑完了,并没有退出,一直在那里
  3. 线程启动速度很快,不占多少开销,不到1毫秒

代码:

# -*- coding: utf-8 -*-
"""
学习 并发
linux下执行
"""
from threading import Thread
from multiprocessing import Process
import time
import os
import psutil
def work():
    print(‘%s,%f: sub begin %d‘ % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time(),os.getpid()))
    print "%s,%f: sub %d,%d,%d" % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())

    time.sleep(5)

    print "%s,%f: sub %d,%d,%d" % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
    print(‘%s,%f: sub end %d‘ % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time(),os.getpid()))

if __name__ == ‘__main__‘:

    print "%s,%f: main begin" % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time())
    print "%s,%f: main %d,%d,%d" % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
    # 开启子线程
    t=Thread(target=work)
    t.start()
    print  ‘%s,%f: main 线程‘ %  (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time())
    print "%s,%f: main %d,%d,%d" % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())

    # 开启子进程
    # t=Process(target=work)
    # t.start()
    # print "\nmain %d,%d,%d" % (os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
    # print(‘\nmain 进程‘)

    print "%s,%f: main end" % (time.strftime(‘%M:%S‘,time.localtime(time.time())),time.time())

  

输出:

格式说明:

小时 :秒,时间戳,     <当前进程ID,  [父 进程ID,当前进程线程数量]>

[email protected]:~/python# python test_threadprocess1.py

----------------------------------------------------------

03:04,1536397384.349529: main begin
03:04,1536397384.349605: main 3604,2692,1
03:04,1536397384.350838: sub begin 3604
03:04,1536397384.350939: main 线程
03:04,1536397384.351009: sub 3604,2692,2
03:04,1536397384.351310: main 3604,2692,2
03:04,1536397384.352097: main end
03:09,1536397389.357353: sub 3604,2692,2

03:09,1536397389.358372: sub end 3604

----------------------------------------------------------

输出解读:

  1. 黄色 标记的中间 输出部分 ,是启动 子线程期间,这段 时间非常快,说明启动线程的速度很快
  2. 红色标记,此时main线程的逻辑 代码跑完了,但是还是显示有2个线程,对比开始,说明main线程并 没有退出

原文地址:https://www.cnblogs.com/sunzebo/p/9609779.html

时间: 2024-11-04 15:34:08

python 归纳 (十一)_线程_threading.Thread的相关文章

python 归纳 (十三)_队列Queue在多线程中使用

# -*- coding: UTF-8 -*- """ 多线程同时读队列 总结: 1. 会阻塞 if self._jobq.qsize() > 0 进入逻辑,此时被其他线程把数据取完了, 在data = self._jobq.get() 阻塞 2. 需要学习锁使用 逻辑: * 主线程提前往队列写好所有数据 * 子线程读取队列数据,没有就退出线程 """ import Queue import threading import time im

Python爬虫(十一)_案例:使用正则表达式的爬虫

本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html 打开之后,不难看出里面一个一个非常有内涵的段子,当你进行翻页的时候,注意url地址的变化: 第一页url: http: //www.neihan8.com/article/list_

python 归纳 (八)_多进程_基本使用

# -*- coding: UTF-8 -*- """ 测试进程使用 multiprocessing.Process 使用: 1. 准备一个函数<fun>,子进程要执行的代码放这里面 def run_proc(name,l_list) 2. 以函数名.tuple(函数参数1,函数参数2...),创建Process 对象 p = multiprocessing.Process(target=run_proc, args=(str(i),l) ) 3. 启动子进程,这

python学习四十一天(线程)

今日主要内容: 线程的概念和简单应用 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念.在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行.这是这样的设计,大大提高了CPU的利用率.进程的出现让每个用户感觉到自己独享CPU,因此,进程就是

Python全栈开发--线程

操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念.在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行.正是这样的设计,大大提高了CPU的利用率.进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多

python之路-------之线程

线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念.在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行.就是这样的设计,大大提高了CPU的利用率.进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的.

Python学习笔记_零零一:Python基本介绍

Python介绍 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构.Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言.Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序.Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装

python学习之进程线程学习二

一.线程介绍 处理线程的模块是threading,multiprocessing模块处理方式跟threading相似 开启线程的两种方式: 例子: from threading import Thread from multiprocessing import Process def work(name):     print('%s say hello' %name) if __name__ == '__main__':     t = Thread(target=work, args=('h

Python菜鸟晋级12----多线程

Python 多线程 多线程类似于同一时候执行多个不同程序,多线程执行有例如以下长处: 使用线程能够把占领长时间的程序中的任务放到后台去处理. 用户界面能够更加吸引人.这样比方用户点击了一个button去触发某些事件的处理,能够弹出一个进度条来显示处理的进度 程序的执行速度可能加快 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比較实用了.在这样的情况下我们能够释放一些珍贵的资源如内存占用等等. 线程在运行过程中与进程还是有差别的. 每一个独立的线程有一个程序运行的入口.顺序