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

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

一、不用线程

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))

运行效果图:

python 多线程笔记(1)-- 概念的更多相关文章

  1. Python多线程笔记(三),queue模块

    尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式即将多线程程序组织为多个独立人物的集合,这些任务之间通过消息队列进行通信 que ...

  2. Python多线程笔记(一)

    Python中使用threading模块来实现多线程 threading提供一些常用的方法 threading.currentThread() 返回当前的线程变量 threading.enumerat ...

  3. python 多线程笔记(5)-- 生产者/消费者模式

    我们已经知道,对公共资源进行互斥访问,可以使用Lock上锁,或者使用RLock去重入锁. 但是这些都只是方便于处理简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题. 要解决更复 ...

  4. python 多线程 笔记(一)

    #coding=utf-8 import threading from time import sleep, ctime loops = [4,2] def loop(nloop, nsec): pr ...

  5. python 多线程笔记(6)-- 闭包

    在类里弄一个闭包出来 很多资料上说,类内部的变量有两种. 按定义所在的位置,分__init__上方的和__init__下方的 按内存所在的位置,分类的和实例的,或者说公共的和私有的 现在,我想在类里定 ...

  6. python 多线程笔记(6)-- 生产者/消费者模式(续)

    用 threading.Event() 也可以实现生产者/消费者模式 (自己拍脑袋想出来的,无法知道其正确性,请大神告知为谢!) import threading import time import ...

  7. python 多线程笔记(4)-- 车站售票模拟

    import threading import time import random class Worker(threading.Thread): '''售票员''' def __init__(se ...

  8. python 多线程笔记(3)-- 线程的私有命名空间

    线程的私有命名空间实现: threading_namespace = threading.local() import threading import time import random thre ...

  9. python 多线程笔记(2)-- 锁

    锁是什么?什么场合使用锁? 锁是一种机制,用于保护那些会引起冲突的资源. 比如上厕所,进去之后第一件事干嘛?把厕所门反锁!表示什么呢?表示这个厕所正在使用中! 至于在厕所里面干大事.干小事.还是打飞机 ...

随机推荐

  1. URAL-1018 Binary Apple Tree---树形DP

    题目链接: https://cn.vjudge.net/problem/URAL-1018 题目大意: 给你一棵树,每条边有一个边权,求以1为根节点,q条边的子数(q+1个点),边权和至最大. 解题思 ...

  2. python 怎样构造字典格式的数据

    #dict()函数的使用 第一种方法l=[('name','xueli'),('age',12)]dd1=dict(l)print dd1#{'age': 12, 'name': 'xueli'} 第 ...

  3. PAT——1040. 有几个PAT

    字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问一共可以形成多少个P ...

  4. Webdriver API中文版

    Webdriver API中文版 1.1   下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGui ...

  5. f-stack中nginx配置后make出现error: ignoring return value of ‘ftruncate’

    问题 Nginx 配置后 make 出现error: src/os/unix/ngx_process_cycle.c: In function 'ngx_start_worker_processes' ...

  6. nRF5 SDK for Mesh(五) Light switch demo 点灯例子

    Light switch demo  灯开demo   Purpose This demo project consists of four sub examples - The light swit ...

  7. Filters in ASP.NET Core (转自MSDN)

    Filters in ASP.NET Core MVC allow you to run code before or after specific stages in the request pro ...

  8. 在Swift中使用AutoLayout-VFL(AutoLayout-VFL笔记)

    1.背景 iOS开发这几年, UI布局工具从frame到Masonry到SnapKit, sb和xib的AutoLayout也用过, 但是代码版本的AutoLayout倒是没用过, 最近一年, 频频发 ...

  9. 浅谈 Virtual DOM 的那些事

    背景 我们都知道频繁的dom给我们带来的代价是昂贵的,例如我们有时候需要去更新Table 的部分数据,必须去重新重绘表格,这代价实在是太大了,相比于频繁的手动去操作dom而带来性能问题,vdom很好的 ...

  10. HCDA day1

    OSI有几层: OSI将计算机网络体系结构(architecture)划分为以下七层: 图1.OSI模型 物理层: 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人. 物理层(Phys ...