我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python3 - 多线程 - thre

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python3 - 多线程 - thre

目录

一、threading 模块:对线程的处理

二、Thread组件

2-1 开启线程的方式一(函数)

2-2 开启线程的方式二 (类)

2-3 Thread 相关内置子方法 

2-4 主进程等待新建线程实例

2-5 线程共用创造进程内资源

2-7 查看线程和‘父’进程的pid

2-8 Thread 实现 “守护线程”

2-8-1 守护线程概念介绍

2-8-2 实现简单 ‘守护线程’

2-9 Thread + Lock 实现线程“互斥锁” 

2-10 Thead + Semaphore 实现 “信号量”

2-11 Thread + Event 实现 “事件”

三、Timer 组件:定时器,n秒后执行操作


multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性;

官方链接

2-1 开启线程的方式一(函数)


from threading import Thread
import time


def task(name):
    print('%s is running' % name)
    time.sleep(2)
    print('%s is done' % name)


if __name__ == '__main__':
    t = Thread(target=task, args=('线程1',))
    t.start()
    print('main')

2-2 开启线程的方式二 (类)


from threading import Thread
import time


class Mythread(Thread):

    def run(self):
        print('%s is running' % self.name)
        time.sleep(2)
        print('%s is done' % self.name)


if __name__ == '__main__':
    t = Mythread()
    t.start()
    print('main')

2-3 Thread 相关内置子方法 

  • obj.isAlive():返回线程是否为活动状态
  • obj.getName():返回线程名
  • obj.setName():设置线程名
  • threading.currentThread():返回当前的线程变量
  • threading.enumerate():返回一个包含正在运行的线程list,即线程启动后、结束前,不包括启动前和终止后的线程。
  • threading.actibeCount():返回正在运行的线程数量,同 len ( threading.enumerate ( ) )

from threading import Thread
import threading
from multiprocessing import Process
import os

def work():
    import time
    time.sleep(3)
    print(threading.current_thread().getName())


if __name__ == '__main__':
    #在主进程下开启线程
    t=Thread(target=work)
    t.start()

    print(threading.current_thread().getName())
    print(threading.current_thread()) #主线程
    print(threading.enumerate()) #连同主线程在内有两个运行的线程
    print(threading.active_count())
    print('主线程/主进程')

    '''
    打印结果:
    MainThread
    <_MainThread(MainThread, started 140735268892672)>
    [<_MainThread(MainThread, started 140735268892672)>, <Thread(Thread-1, started 123145307557888)>]
    主线程/主进程
    Thread-1
    '''

2-4 主进程等待新建线程实例


from threading import Thread
import time
def sayhi(name):
    time.sleep(2)
    print('%s say hello' %name)

if __name__ == '__main__':
    t=Thread(target=sayhi,args=('egon',))
    t.start()
    t.join()
    print('主进程')
    print(t.is_alive())

    '''
    >>>egon say hello
    >>>主进程
    >>>False
    '''

2-5 线程共用创造进程内资源


from threading import Thread

n = 100


def task():
    global n
    n = 0


if __name__ == '__main__':
    t = Thread(target=task)
    t.start()
    t.join()
    print('主', n)

'''
>>>主 0
'''

 

2-7 查看线程和‘父’进程的pid


from threading import Thread
import os


def task():
    print('%s is running' % os.getpid())


if __name__ == '__main__':
    t = Thread(target=task)
    t.start()
    print('主', os.getpid())


'''
>>>14488 is running
>>>主 14488
'''

2-8 Thread 实现 “守护线程”

2-8-1 守护线程概念介绍

守护线程:守护线程会等待主进程内,所有非守护线程,全部运行完毕后,才进行销毁。即,等待进程结束。

2-8-2 实现简单 ‘守护线程’


from threading import Thread
import time


def foo():
    print(123)
    time.sleep(1)
    print("end123")


def bar():
    print(456)
    time.sleep(3)
    print("end456")


t1 = Thread(target=foo)
t2 = Thread(target=bar)

t1.daemon = True
t1.start()
t2.start()
print("main-------")

'''
>>>123
>>>456
>>>main-------
>>>end123
>>>end456
'''

2-9 Thread + Lock 实现线程“互斥锁” 


from threading import Thread, Lock
import time

mutex = Lock() # 每个线程内创建一把锁
n = 100


def task():
    global n

    # 加锁操作

    # mutex.acquire()
    # temp = n
    # time.sleep(0.1)
    # n = temp - 1
    # mutex.release()
    
    with mutex:
        temp = n
        time.sleep(0.1)
        n = temp - 1


if __name__ == '__main__':
    t_l = []
    for i in range(100):
        t = Thread(target=task)
        t_l.append(t) # 添加线程对象
        t.start()

    # 等待每一个线程结束
    for t in t_l:
        t.join()
    print(n)

2-10 Thead + Semaphore 实现 “信号量”

  • 信号量:保证只有指定数量线程,才能进行连接资源操作。
  • Semaphore:内部管理一个计数器,每次调用acquire()时+1,每次release()时-1.保证了每次连接的指定数量。

from threading import Thread,Semaphore
import time,random

sm=Semaphore(5)
#设置信号量允许连接数

def task(name):
    sm.acquire()

    print('%s 正在使用' %name)
    time.sleep(random.randint(1,3))

    sm.release()

if __name__ == '__main__':

    for i in range(20):
        t=Thread(target=task,args=('路人%s' %i,))
        t.start()

2-11 Thread + Event 实现 “事件”

  •  事件:设置面向线程的一个信号标志,控制线程的执行
  • Event对象
    • 包含一个由线程设置的信号标志,允许线程等待事件发生。
    • 在初始状态下,信号标志为False。
    • 如果存在线程等待Event对象,则Event对象的标志为False,线程将被阻塞至对象标志改变为True。
    • 如果一个线程等待一个标志为True的Event对象,那么线程将忽略此事件对象,继续执行。
  • Event对象内部方法
    • event.isSet():返回event的状态
    • event.wait():如果状态值==False,将阻塞线程
    • event.set():如果event的状态值为True,所有阻塞池的线程激活进入就绪状态,等待操作系统调度
    • event.clear():回复envent的状态为False

from threading import Thread,Event
import time

event=Event()

def light():
    print('红灯正亮着')
    time.sleep(3)
    event.set() #绿灯亮

def car(name):
    print('车%s正在等绿灯' %name)
    event.wait() #等灯绿
    print('车%s通行' %name)

if __name__ == '__main__':
    # 红绿灯
    t1=Thread(target=light)
    t1.start()
    # 车
    for i in range(10):
        t=Thread(target=car,args=(i,))
        t.start()

from threading import Timer
 
 
def hello():
    print("hello, world")
 
t = Timer(1, hello)
t.start()  # after 1 seconds, "hello, world" will be printed

 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python3 - 多线程 - thre

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python3 - 多线程 - thre

目录一、threading 模块:对线程的处理二、Thread组件2-1 开启线程的方式一(函数)2-2 开启线程的方式二 (类)2-3 Thread 相关内置子方法 2-4 主进程等待新建线程实例2-5 线程共用创造进程内资源2-7 查看
2023-01-31

Python3 多线程

两个概念:并发:假同时,一段时间内同时处理多个任务,单核都可以;并行:真同时,同时处理多个任务,必须多核。主流操作系统上完成并发的手段有进程和线程,主流的编程语言提供了用户空间的调度:协程。Python 也不例外。(想自学习编程的小伙伴请搜
2023-01-31

python3 多线程编程

0.什么是线程多线程模块创建线程的方法join()方法4.isAlive()方法name属性和daemon属性6.线程的同步---锁7.线程的同步---Event对象8.线程的同步---Condition条件变量0.什么是线程线程是CPU分
2023-01-31

Python3 多线程讲解

前言Python3 线程中常用的两个模块为•_thread•threading(推荐使用)thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Py
2023-01-31

Python3多线程详解

使用多线程,可以同时进行多项任务,可以使用户界面更友好,还可以后台执行某些用时长的任务,同时具有易于通信的优点。python3中多线程的实现使用了threading模块,它允许同一进程中运行多个线程,本文介绍的非常详细,,需要的朋友可以参考下
2023-05-19

python3-001-多线程简单聊天室

这次代码为python3编写,并且使用网络调试助手、与python3聊天室程序进行通信测试。1、先放干货代码,如下: 1 from socket import * 2 from threading import Thread 3
2023-01-31

python3 queue多线程通信怎么实现

这篇文章主要介绍了python3 queue多线程通信怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python3 queue多线程通信怎么实现文章都会有所收获,下面我们一起来看看吧。queue分类py
2023-07-02

python3实现多线程ping一个网段

####################################################""" 实现多线程ping一个网段的地址,测试联通性 copyright  2016/9/30 lighter_py"""#######
2023-01-31

Python3多线程处理爬虫的实战

本文主要介绍了Python3多线程处理爬虫的实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-02

python3进程和线程

进程基本概念进程是执行中的程序, 也就是说进程是动态的, 程序是静态的进程是操作系统分配资源的最小单位,有一个进程控制块(PCB), 有自己唯一的一个进程标识符(PID)进程之间相互独立, 内存不共享每个进程都是一个实体, 每个进程都有属于
2023-01-31

怎么使用Python3多线程处理爬虫

本文小编为大家详细介绍“怎么使用Python3多线程处理爬虫”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python3多线程处理爬虫”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。多线程到底什么是多线程
2023-07-05

python3爬虫中多线程的使用示例

这篇文章主要介绍了python3爬虫中多线程的使用示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文教程操作环境:windows7系统、Python 3.9.1,DELL
2023-06-14

python3--threading模块(线程)

上章节内容总结:队列 队列:先进先出,数据进程安全 管道+锁 可实现队列 生产者消费者模型:解决数据供需不平衡管道 双向通信 数据进程不安全 EOFError: 管道是由操作系统进行引用计数的 必须在所有进程中
2023-01-30

python3多线程批量去除电视剧的片头

简介下载的电视剧经常遇到片头和片尾,有的片头还有广告,比较厌烦,所以笔者就写了个脚本,使用python3,ffmpeg批量多线程去除了片头和片尾,这里针对的是单部多集电视剧的片头、片尾,片头片尾的时间比较相似针对多部多集的电视剧,可以通过e
2023-01-31

python3多进程实现

python多进程的主要方式有两种,一种是使用os模块的fork方法,另一种方法是使用multiprocessing模块,这两种方法的就别在于前者仅适用于Unix/Linux操作系统,后者是跨平台的实现方式1.使用fork方法实现- for
2023-01-31

Python3中多线程操作MySQL插入数据的方法

这篇文章主要介绍Python3中多线程操作MySQL插入数据的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!多线程(连接池)操作MySQL插入数据针对于此篇博客的收获心得:首先是可以构建连接数据库的连接池,这样可
2023-06-15

python3--进程,线程,协程效率对比

需求:写一个脚本,判断192.168.11.0/24网络里,当前在线ip有哪些?知识点:1 使用subprocess模块,来调用系统命令,执行ping 192.168.11.xxx 命令2 调用系统命令执行ping命令的时候,会有返回值(p
2023-01-30

python多线程————3、多线程间通

1、共享变量#通过共享变量import timeimport threadingurl_list = []def get_detail_html(): global url_list while True: if
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录