python 多线程简单demo

Python 多线程实例 在 run 方法中,我们使用一个列表 fib 来保存斐波那契数列,初始值为 [0, 1],然后使用循环计算出前 n 项斐波那契数列,最后输出结果。在主程序中,我们创建了 5 个 FibonacciThread 线程,每个线程分别计算斐波那契数列的前 1 至 5 项。需要注意的是,Python 多线程的执行顺序是不确定的,因为线程的调度是由操作系统控制的。需要注意的是,在这个例子中,我们没有考虑线程安全问题,可能会出现竞争条件和死锁等问题。在实际开发中,需要更加仔细地处理线程安全问题,避免出现意外情况。 阅读详情

Python多线程与多线程中join()的用法

Python多线程与多进程中join()方法的效果是相同的。

下面仅以多线程为例:

首先需要明确几个概念:

知识点一:
当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,例子见下面一。

知识点二:
当我们使用setDaemon(True)方法,设置子线程为守护线程时,主线程一旦执行结束,则全部线程全部被终止执行,可能出现的情况就是,子线程的任务还没有完全执行结束,就被迫停止,例子见下面二。

知识点三:
此时join的作用就凸显出来了,join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程在终止,例子见下面三。

知识点四:
join有一个timeout参数:

  1. 当设置守护线程时,含义是主线程对于子线程等待timeout的时间将会杀死该子线程,最后退出程序。所以说,如果有10个子线程,全部的等待时间就是每个timeout的累加和。简单的来说,就是给每个子线程一个timeout的时间,让他去执行,时间一到,不管任务有没有完成,直接杀死。
  2. 没有设置守护线程时,主线程将会等待timeout的累加和这样的一段时间,时间一到,主线程结束,但是并没有杀死子线程,子线程依然可以继续执行,直到子线程全部结束,程序退出。
一:Python多线程的默认情况
import threading
import time

def run():
    time.sleep(2)
    print('当前线程的名字是: ', threading.current_thread().name)
    time.sleep(2)


if __name__ == '__main__':

    start_time = time.time()

    print('这是主线程:', threading.current_thread().name)
    thread_list = []
    for i in range(5):
        t = threading.Thread(target=run)
        thread_list.append(t)

    for t in thread_list:
        t.start()

    print('主线程结束!' , threading.current_thread().name)
    print('一共用时:', time.time()-start_time)

其执行结果如下

关键点:

  1. 我们的计时是对主线程计时,主线程结束,计时随之结束,打印出主线程的用时。
  2. 主线程的任务完成之后,主线程随之结束,子线程继续执行自己的任务,直到全部的子线程的任务全部结束,程序结束。
二:设置守护线程
import threading
import time

def run():

    time.sleep(2)
    print('当前线程的名字是: ', threading.current_thread().name)
    time.sleep(2)


if __name__ == '__main__':

    start_time = time.time()

    print('这是主线程:', threading.current_thread().name)
    thread_list = []
    for i in range(5):
        t = threading.Thread(target=run)
        thread_list.append(t)

    for t in thread_list:
        t.setDaemon(True)
        t.start()

    print('主线程结束了!' , threading.current_thread().name)
    print('一共用时:', time.time()-start_time)

其执行结果如下,注意请确保setDaemon()在start()之前。

关键点:

  1. 非常明显的看到,主线程结束以后,子线程还没有来得及执行,整个程序就退出了。
三:join的作用
import threading
import time

def run():

    time.sleep(2)
    print('当前线程的名字是: ', threading.current_thread().name)
    time.sleep(2)


if __name__ == '__main__':

    start_time = time.time()

    print('这是主线程:', threading.current_thread().name)
    thread_list = []
    for i in range(5):
        t = threading.Thread(target=run)
        thread_list.append(t)

    for t in thread_list:
        t.setDaemon(True)
        t.start()

    for t in thread_list:
        t.join()

    print('主线程结束了!' , threading.current_thread().name)
    print('一共用时:', time.time()-start_time)

其执行结果如下:

关键点:

  1. 可以看到,主线程一直等待全部的子线程结束之后,主线程自身才结束,程序退出。
python多线程实现多任务 附demo 使用线程完成多任务需要导入threading包:import threading 1.线程类Thread参数说明: Thread([group [, target [, name [, args [, kwargs]]]]]) group: 线程组,目前只能使用None target: 执行的目标任务名 args: 以元组的方式给执行任务传参 kwargs: 以字典方式给执行任务传参 ... 阅读详情

相关推荐

RouterOS v7.6实战:5分钟搞定IPv6双栈配置(含光猫桥接避坑指南)

本文详细解析了在RouterOS v7.6系统中配置IPv6双栈网络的实战步骤,特别针对家庭网络光猫桥接模式下的常见问题提供了避坑指南。文章涵盖了从基础配置到企业级部署的进阶内容,包括IPv6前缀获取、DHCPv6客户端设置、路由通告以及安全优化,帮助用户充分利用v7.6版本在IPv6支持上的改进与优势。

embedding5hiker的博客 1282

Java Thread.join()详解

 一、使用方式。 join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二、为什么要用join()方法 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是

android的博客 5万+

常用本体建模工具

常用本体建模工具: Apollo、OntoStudio、TopBraid Composer、Semantic Turkey、Knoodl、Chimaera、OliEd、WebODE、Kmgen和DOME Protégé Protégé[1]是一款由斯坦福大学编写并维护的开源本体建模和编辑工具,其支持Web版本和PC版本,使用OWL语言(关于OWL的详细介绍可参看前文2.1节内容)对知识进行表示,读者可以通过Protégé的官方网站访问Web版本或下载桌面版本。Protégé最早开发于1987年,最初目的是

qq_40503347的博客 6165

python 多线程 join用法 简介

目录 概念说明 Python多线程的默认情况 设置守护线程 join的作用 python多线程与多进程中join()方法的效果是相同的。 下面仅以多线程为例 概念说明 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,例子见下面一。 知识点二:

whatday的专栏 3994

Innovus 安装全过程

【代码】Innovus 安装全过程。

lmyynlbcy的博客 5537

纽扣电池供电系统优化:NBM5100A与STM32F745VG组合方案

在低功耗物联网设备设计中,能量管理是核心挑战之一。纽扣电池因其体积小、成本低被广泛采用,但瞬时大电流需求常导致电压骤降和寿命缩短。通过超级电容缓冲技术,可以实现能量的细水长流式存储与集中释放。NBM5100A电源管理IC与STM32F745VG微控制器的组合方案,采用双阶段能量管理架构,先以恒定小电流充电,再通过电容释放大电流。这种方案不仅能提升系统稳定性,还能延长电池寿命3-5倍,特别适合智能门锁、无线传感器等需要间歇性高功率输出的场景。

weixin_29194255的博客 257

Python多线程与多线程中join()的用法

Python多线程与多进程中join()方法的效果是相同的。 下面仅以多线程为例: 首先需要明确几个概念: 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下(其实就是setDaemon(False)),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,例...

weixin_30566149的博客 1478

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

weixin_45735391的博客 3万+

线程中join()的用法

转载来源:线程中join()的用法     Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行。 public static void main(String[] args) throws InterruptedException { System.out.println("main start"); Threa...

ZHAOXING_ME的博客 1万+

UG\NX二次开发 获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态

获取对象的层、颜色、隐藏状态、线宽、线型、高亮显示状态。

王牌飞行员_里海的博客 1982

Python爬虫实战:绕过Cloudflare反爬的最新技术与完整代码详解

在互联网数据采集领域,越来越多的网站开始部署CDN和安全防护服务,其中 Cloudflare 是最为广泛使用的防护方案之一。它不仅为网站提供DDoS防护,还能通过JS挑战、验证码和行为分析来识别并拦截爬虫。这给爬虫工程师带来了极大挑战——如何在不违反网站服务条款的情况下,实现有效的数据采集?本文将分享Python领域绕过Cloudflare反爬的最新技术方法,结合最新流行库与自动化浏览器,帮助你攻克这一难题。绕过Cloudflare反爬不是一蹴而就,需结合多技术、多策略,持续迭代。

2201_76125261的博客 2628

python 多线程socket的简单demo

大致的思路就是 用server循环accept() 设置一个函数,用来作为线程的初始函数 accept()之后,单开一个线程,将client传递进去即可 # coding=utf-8 import socket import threading import time from Helper.Message import MessageHelper server = socket.socke...

qq_40666620的博客 336

基于FPGA的多级CIC滤波器实现四倍插值

基于FPGA的多级CIC滤波器实现四倍插值 原文链接:基于FPGA的多级CIC滤波器实现四倍插值 在《基于FPGA的多级CIC滤波器实现四倍抽取一》和《基于FPGA的多级CIC滤波器实现四倍抽取二》中我们先来了解滑动平均滤波器、微分器、积分器以及梳状滤波器原理以及它们的幅频响应。此篇我们将用verilog实现基于FPGA的多级CIC滤波器实现四倍插值。 1 CIC滤波器的基本概述 CIC(积分梳状...

baidu_34971492的博客 3142

Python简单的多线程demo:常用写法

Python简单的多线程demo:常用写法 简单多线程实现:启动50个线程,并计算执行时间。 import threading import time def run(n): time.sleep(3) print("task:",n) # 使用单线程,执行完需要6s # t1.run() # t2....

weixin_34396103的博客 102

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python简单的多线程demo:装逼写法

Python简单的多线程demo:装逼写法 用面向对象来写多线程: import threading class MyThread(threading.Thread): def __init__(self, n): super(MyThread, self).__init__() sel...

weixin_33915554的博客 212

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python爬虫,超简单nendo官网作品图片爬虫demo

一个简单的demo,Python采集下载图片,其中图片下载的时候采用了简单的多线程下载,未涉及到其他知识,比较简单,属于拿来就能使用的demo,供大家参考和学习,如有疑问可以加本渣渣微信...

二爷记 763

pythontcp多客户端_Python TCPServer 多线程多客户端通信的实现

最简单、原始的TCP通信demo服务端Http请求:import socket# 创建一个servicesockeserviceSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 给服务器绑定地址(ip地址,端口号)serviceSocket.bind(("192.168.171.1", 80))print("等待客户端接入")#...

weixin_39709178的博客 288

简单的java和python的socket通信,长连接

因为一些运算要使用到python的模型和算法,python需要和java端建立长连接。这里是一个简单的demo实现: java服务器: public class testSocket{ public static void main(String args[])throws Exception { ServerSocket serverSocket = new ServerSocket(9999); System.out.println("服务启动");

m0_55505998的博客 2855

pythontcp多线程聊天_Python TCPServer 多线程多客户端通信的实现

最简单、原始的TCP通信demo服务端Http请求:import socket# 创建一个servicesockeserviceSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 给服务器绑定地址(ip地址,端口号)serviceSocket.bind(("192.168.171.1", 80))print("等待客户端接入")#...

weixin_39616045的博客 454

python tcp server 多线程_Python TCPServer 多线程多客户端通信的实现

最简单、原始的TCP通信demo服务端Http请求:import socket# 创建一个servicesockeserviceSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 给服务器绑定地址(ip地址,端口号)serviceSocket.bind(("192.168.171.1", 80))print("等待客户端接入")#...

weixin_39831567的博客 258

python3 线程安全_【python3两小时根本不够】入门笔记04:线程+Lock安全同步

有了简单爬虫,但是效率实在是太慢,于是决定启用线程进行爬取数据但是对于临界资源的定义不好把握,思路如下:1、定义队列(Queue的数据结构,List也可,安全性待考究)demo:https://blog.youkuaiyun.com/the_fool_/article/details/808436442、对页码数++的部分进行加锁在此之前,要讲一下继承,网上看了一个博主写的两个demo清晰明了,列在下面:以下...

weixin_39606003的博客 137

python多线程小demo

前言 呜呜呜毕设好难,学点好玩的东西娱乐一下吧…就选了python多线程。 例子 from threading import Thread class Model: def __init__(self): self.lt = [2021] def add(self, num): self.lt.append(num) # 创建 Thread 的子类 class MyThread(Thread): def __init__(self,

andy dennis的博客 1202

Python多线程和队列结合demo

一、使用场景 大家都知道python的多线程不是真正的多线程,但是对于io类型的任务,多线程还是能发挥作用的。那么多个线程之间是如何进行变量共享的呢,很多时候我们可以借助queue模块,方便。今天就做一个学习。 二、threading模块 Python的多线程还是主要使用标准库threading,该库提供了更高级别、功能更全面的线程管理。 该模块提供的主要方法: threading.current...

weixin_42625143的博客 4976

C++多线程的Demo(一)

本来是开发QT项目的,但是项目需要将部分功能封装为动态库,那么为了保证未来动态库的可移植性,于是打算放弃使用QT相关的内容,比如QThread,而是使用C++的Thread。

Alon1787的博客 1420

python3多线程demo_python3 多线程的使用

示例1:import threadingfrom time import sleepclass forThread(threading.Thread):def __init__(self, event):threading.Thread.__init__(self)self.name = '我的多线程'self.event = eventdef run(self):print('你想让程序干什么,...

weixin_39832643的博客 160
上一篇: ajax 执行success 还是error 为什么报parsererror
下一篇: 负载均衡 ribbon
rabbit0708
博客等级 码龄15年 12粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值