PYTHON——多线程:Thread类与线程对象

Thread类与线程对象

  Thread类构造方法的target关键字参数不仅可以是函数,还可以是一个对象,可以称这个对象为线程对象。其实,线程调用的仍然是函数,只是这个函数用对象进行了封装。这么做的好处是可以将线程函数相关的代码都放在这个对象对应的类中,更能体现面向对象的封装性。
  线程对象对应的类需要有一个可以传入线程函数和参数的构造方法,而且在类中还必须有一个名为“__call__()”的方法。当线程启动时,会自动调用线程对象的"__call__()"方法,然后在该方法中会调用线程函数。本例通过Thread类构造方法传入一个线程对象,并通过线程对象指定了线程函数和相应的参数。

实例代码:

# 从Thread类继承
import threading
from time import sleep,ctime

# 线程对象对应的类
class MyThread(object):
    # func表示线程函数,args表示线程函数的参数
    def __init__(self, func, args):
        self.func = func
        self.args = args

    # 程序启动时会调用__call__()方法
    def __call__(self, *args, **kwargs):
        # 调用线程函数,并将元组类型的参数值分解为单个的参数值传入线程函数
        self.func(*self.args)

def fun(index, sec):
    print(‘开始执行{},时间:{}‘.format(index,ctime()))
    sleep(sec)
    print(‘结束执行{},时间:{}‘.format(index,ctime()))

def main():
    print(‘执行开始时间:{}‘.format(ctime()))
    # 创建第一个线程,通过target关键字参数指定了线程对象(MyThread),延迟4秒
    thread1 = threading.Thread(target = MyThread(fun,(10,4)))
    thread1.start()
    thread2 = threading.Thread(target = MyThread(fun,(20,2)))
    thread2.start()
    thread3 = threading.Thread(target = MyThread(fun,(30,1)))
    thread3.start()
    thread1.join()
    thread2.join()
    thread3.join()
    print(‘所有的线程函数已经执行完毕时间:{}‘.format(ctime()))

if __name__ == ‘__main__‘:
    main()

原文地址:https://www.cnblogs.com/chenhaiming/p/9889970.html

时间: 2024-08-26 13:29:36

PYTHON——多线程:Thread类与线程对象的相关文章

Java多线程01(Thread类、线程创建、线程池)

Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 1.1.2 单线程程序 - 从入口m

PYTHON——多线程:Thread类与线程函数

Thread类与线程函数 可以使用Thread对象的join方法等待线程执行完毕:主线程(main()函数)中调用Thread对象的join方法,并且Thread对象的线程函数没有执行完毕,主线程会处于阻塞状态.使用Thread类实现多线程的步骤:1.创建Thread类的实例:2.通过Thread类的构造方法的target关键字参数执行线程函数:通过args关键字参数指定传给线程函数的参数.3.调用Thread对象的start方法启动线程.下面例子功能:使用Thread对象启动2个线程,并在各自

2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class TemplateThread { //如果这个方法不想被子类或者别人随意改动[这样子类就不能覆写该方法了],这里方法就要设置为final方法 public final void println(String message){ System.out.println("###################

Java多线程编程基础之线程对象

在进入java平台的线程对象之前,基于基础篇(一)的一些问题,我先插入两个基本概念. [线程的并发与并行] 在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent).而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel). 在上面包括以后的所有论述中,请各位朋友谅解,我无法用最准确的词语来定义储

java 第54节 继承Thread类创建线程

2016-07-01 1 继承Thread类创建线程 class 类名 extends Thread{ public void runa(){ //相关代码 } } package com.java1995; /** * 继承Thread类创建线程 * @author Administrator * */ public class MyThread extends Thread{ //构造器:给线程命名 public MyThread(String name){ super(name); } /

【转】线程、Thread类和线程终止

一.线程Thread启动 0. Thread类实现了java.lang.Runnable接口,即实现了run方法.虽然在Sun JDK中,start()调用了start0()方法,start0()方法又是native的,但实际上新的线程就是调用了Thread的run()方法,当然这native的实现中一定有线程的fork操作,使两个线程并列执行. 1. Thread类有8个重载的构造方法.在Sun JDK的源码中,这8个构造方法都是调用了一个私有的init()方法来初始化对象的各个属性.这其中会

继承Thread类创建线程

1 继承Thread类创建线程 class 类名 extends Thread{ public void run(){ //相关代码 } } 2 实现Runnable接口 1 实现Runnable接口 class类名 implements Runnable{ public void run(){ } } A a=new A(); Thread t=new Thread(A); Thread t1=new Thread(A,"线程1"); 2两种方法的比较 extends Thread

2018-08-25多线程Thread类+Runnable接口+线程的6种状态

多线程: 进程:进程指正在运行的程序:确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能(进入内存运行的程序成为进程)! 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程!一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序(线程是执行单元,一个进程可以包括多个线程,一个程序可以有多个进程)! 单线程程序:若有多个任务只能依次执行(这个任务执行完毕,下一个任务开始执行)!如:去网吧上网,网吧只能让一

Python 多线程 -thread threading Queue- 简单学习

在实际工作过程中,会出现需要并发的做一些事情,例如一台机器测到几千台机器的网络连通性,如果你单线程一台一台测的话,会花费很多的事情,不具有实时性,更不能在变化的时候立刻感知当时网络的状况,这时多线程就是一个很好地选择.python已经给我们封装好了多线程库thread和threading. thread:比较底层的模块 threading:Higher-level threading interface ps:建议使用threading模块 - 高级别的threading模块更为先进,对线程的支