python 多线程笔记(1)-- 概念

简介: 本文对不使用线程和使用线程做了一个对比。 假设有两件事情:听歌、看电影 一、不用线程 import time songs = ['爱情买卖','朋友','回家过年','好日子'] movies = ['阿凡达','猩球崛起'] def music(songs): f...

本文对不使用线程和使用线程做了一个对比。

假设有两件事情:听歌、看电影

一、不用线程

import time

songs = ['爱情买卖','朋友','回家过年','好日子']
movies = ['阿凡达','猩球崛起']

def music(songs):
    for s in songs:
        print("开始听歌曲:%s \t-- %s" %(s, time.ctime()))
        time.sleep(3)

def movie(movies):
    for m in movies:
        print("开始看电影:%s \t-- %s" %(m, time.ctime()))
        time.sleep(5)


if __name__ == '__main__':
    # 直接
    start = time.clock()

    music(songs)
    movie(movies)

    print("全部结束,耗时:{:.2f}".format(time.clock() - start))

运行效果图:

我们来计算一下时间:

  歌曲:4 * 3 = 12 秒

  电影:2 * 5 = 10 秒

  合计: 22 秒 (方法:累加)

 

二、使用线程

开两个线程,一个听歌,一个看电影

import threading
import time

songs = ['爱情买卖','朋友','回家过年','好日子']
movies = ['阿凡达','猩球崛起']

def music(songs):
    for s in songs:
        print("开始听歌曲:%s \t-- %s" %(s, time.ctime()))
        time.sleep(3)

def movie(movies):
    for m in movies:
        print("开始看电影:%s \t-- %s" %(m, time.ctime()))
        time.sleep(5)


if __name__ == '__main__':
    
    start = time.clock()
    
    # 创建线程
    t1 = threading.Thread(target=music, args=(songs,))  # 听歌
    t2 = threading.Thread(target=movie, args=(movies,)) # 看电影
    
    # 启动所有线程
    for t in [t1, t2]:
        t.setDaemon(True) # 守护线程
        t.start()
        #t.join() 不要这样
    #t.join() 也不要这样
    
    # 阻塞主线程,直到所有子线程退出
    for t in [t1, t2]:
        t.join()
    
    print("全部线程结束,耗时:{:.2f}".format(time.clock() - start))

运行效果图:

我们来计算一下时间:

  歌曲:4 * 3 = 12 秒

  电影:2 * 5 = 10 秒

  合计:12  秒(方法:取最大值)

 

 三、如果没有 t.join(),则线程进入后台静默运行!

import threading
import time

songs = ['爱情买卖','朋友','回家过年','好日子']
movies = ['阿凡达','猩球崛起']

def music(songs):
    for s in songs:
        print("开始听歌曲:%s \t-- %s" %(s, time.ctime()))
        time.sleep(3)

def movie(movies):
    for m in movies:
        print("开始看电影:%s \t-- %s" %(m, time.ctime()))
        time.sleep(5)


if __name__ == '__main__':

    start = time.clock()
    
    # 创建线程
    t1 = threading.Thread(target=music, args=(songs,))
    t2 = threading.Thread(target=movie, args=(movies,))
    
    # 启动所有线程
    for t in [t1, t2]:
        t.setDaemon(True) # 守护线程
        t.start()
    
    # 阻塞主线程,直到所有子线程退出,若没有,则进入后台静默运行
    #for t in [t1, t2]:
    #    t.join()
    
    print("全部线程结束,耗时:{:.2f}".format(time.clock() - start))

运行效果图:

目录
相关文章
|
7月前
|
分布式计算 并行计算 安全
在Python Web开发过程中:详述Python中的GIL及其对多线程的影响。
Python的GIL是CPython中的全局锁,限制了多线程并行执行,尤其在CPU密集型任务上导致性能瓶颈。虽然GIL限制了多线程的并行计算,但在I/O密集型任务中,线程可交替执行提升吞吐量。为利用多核,开发者常选择多进程或使用无GIL的解释器,如Jython、PyPy。异步IO和分布式计算也是应对策略。
90 9
|
7月前
|
Java Python
python基础篇:多线程的基本使用
python基础篇:多线程的基本使用
63 5
|
7月前
|
安全 调度 Python
Python中如何实现多线程?请举例说明。
【4月更文挑战第19天】Python的`threading`模块实现多线程,示例创建并启动两个线程`thread1`和`thread2`,执行同一函数`thread_function`,打印开始和结束消息并模拟任务。线程并发执行,使用`join`等待所有线程完成。注意线程执行顺序不确定,多线程编程需处理线程安全和并发控制问题。如有更多疑问,欢迎提问😊
31 0
|
测试技术 数据处理 Python
【Python】第一个多线程项目的简单实战教程
在Python中进行多线程编程是一种有效的方式来提高程序的性能和并发性。本项目旨在帮助您开始进行多线程编程,并提供一个简单的实战示例。 在这个项目中,您将学习如何使用Python的threading模块创建和管理多个线程。通过将任务分配给不同的线程,可以同时执行多个任务,从而加快程序的执行速度。
【Python】第一个多线程项目的简单实战教程
|
Python
【Python零基础入门篇 · 31】:多线程、线程的无序和封装
【Python零基础入门篇 · 31】:多线程、线程的无序和封装
139 0
【Python零基础入门篇 · 31】:多线程、线程的无序和封装
|
消息中间件 数据格式 Python
一文读懂Python进程间通信的几种方式
为什么进程之间需要通信? 1.数据传输 一个进程需要将它的数据发送给另一个进程; 2.资源共享 多个进程之间共享同样的资源;
|
Linux iOS开发 MacOS
【Python必备基础核心篇】:函数案列与进阶
【Python必备基础核心篇】:函数案列与进阶
154 0
|
Python
Python基础(十五):继承
多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
149 0
Python基础(十五):继承
|
Python
Python基础(十一):面向对象基本概念
面向对象编程 —— Object Oriented Programming 简写 OOP
Python基础(十一):面向对象基本概念