---恢复内容开始---

首先先来看个单线程的例子:

from time import ctime,sleep

def music():
for i in range():
print("I was listening to music. %s" %ctime())
sleep() def move():
for i in range():
print("I was at the movies! %s" %ctime())
sleep() if __name__ == '__main__':
music()
move()
print("all over %s" %ctime())

首先先听了一首music,觉得音乐好听,就用for循环来控制音乐的播放了两次,每首音乐播放需要1秒钟,sleep()来控制音乐播放的时长,

听说有部电影好看,我们就去看,每一场电影需要5秒钟,电影是在太好看了,我们有for循环2次运行结果如下:

我正在听音乐. Sun May  ::
我正在听音乐. Sun May ::
你正在看抖音! Sun May ::
你正在看抖音! Sun May ::
all over Sun May ::
[Finished in .2s]

通过上边我们看到有两个方法,想到我们可不可以自定义听什么歌,看抖音什么类型的短视频

于是对上面代码加以改造:

from time import ctime,sleep

def music(song):
for i in range(2):
print("我正在听%s音乐. %s" %(song,ctime()))
sleep(1)

def move(tv):
for i in range(2):
print("你正在看抖音%s短视频! %s" %(tv,ctime()))
sleep(5)

if __name__ == '__main__':
music('纸短情长')
move('吃鸡')
print("all over %s" %ctime())

看到了吧 我们加了个参数,运行结果:

我正在听纸短情长音乐. Sun May  ::
我正在听纸短情长音乐. Sun May ::
你正在看抖音吃鸡短视频! Sun May ::
你正在看抖音吃鸡短视频! Sun May ::
all over Sun May ::
[Finished in .2s]

多线程:体现了一下单线程的使用,那么我们就来看看多线程到底有什么更加强大的功能

from time import ctime, sleep
import threading def music(song):
for i in range():
print("I was listening to %s. %s" % (song, ctime()))
sleep() def move(mymove):
for i in range():
print("I was at the %s! %s" % (mymove, ctime()))
sleep() threads = []
th1 = threading.Thread(target=music, args=('一个人走',))
threads.append(th1)
th2 = threading.Thread(target=move, args=('复仇者联盟',))
threads.append(th2)
if __name__ == '__main__':
for t in threads:
t.setDaemon(True) # setDaemon(True)将线程声明为
# 守护线程,必须在start() 方法调用之前设置,如果
# 不设置为守护线程程序会被无限挂起。子线程启动后,
# 父线程也继续执行下去,当父线程执行完最后一条语句
t.start()
t.join()#程序加了个join()方法,用于等待线程
# 终止。join()的作用是,在子线程完成运行之前,这个子线
# 程的父线程将一直被阻塞。
print("all over %s" % ctime())

首先肯定是要导入threading模块:import threading

threads = []
th1 = threading.Thread(target=music, args=('一个人走',))
threads.append(th1)

  创建了threads数组,创建线程th1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。

  接着以同样的方式创建线程th2,并把t2也装到threads数组。

for t in threads:

  t.setDaemon(True)

  t.start()

最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)

setDaemon()

  setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print "all over %s" %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。

start()

开始线程活动。

运行结果:

I was listening to 一个人走. Sun May  ::
I was at the 复仇者联盟! Sun May ::
I was listening to 一个人走. Sun May ::
I was at the 复仇者联盟! Sun May ::
all over Sun May ::
[Finished in .3s]

到这里,我们发现如果我有好多个线程,那岂不是我每个线程都要创建一个th~

#!user/bin/env python
# coding=utf- from time import ctime, sleep
import threading def music(song):
for i in range():
print("I was listening to %s. %s" % (song, ctime()))
sleep() def move(mymove):
for i in range():
print("I was at the %s! %s" % (mymove, ctime()))
sleep() def new_threading(name):
new_thread = name.split('.')[]
if new_thread == 'mp3':
music(name)
else:
if new_thread == 'mp4':
move(name)
else:
print('error:The format is not recognized!') list = ['纸短情长.mp3', '复仇者联盟.mp4']
threads = []
file_count = range(len(list))
# 创建线程
for i in file_count:
t = threading.Thread(target=new_threading, args=(list[i],))
threads.append(t)
# 启动线程
if __name__ == '__main__':
for t in file_count:
threads[t].start()
for t in file_count:
threads[t].join()
print("all over %s" % ctime())

我们增加了一个增加线程的方法,只要想 list中添加一个文件,程序会自动为其创建线程

I was listening to 纸短情长.mp3. Sun May  ::
I was at the 复仇者联盟.mp4! Sun May ::
I was listening to 纸短情长.mp3. Sun May ::
I was at the 复仇者联盟.mp4! Sun May ::
all over Sun May ::
[Finished in .2s]

是不是实现了 ,我们继续优化,发现new——threading中有个判断文件扩展名的,然后才调用music和move()

那为什么不用一个方法(也就是一个软件)同时播放音乐和电影呢

#!user/bin/env python
# coding=utf- from time import ctime, sleep
import threading def super_player(file_type,time):
for i in range():
print("正在播放 %s. %s" % (file_type, ctime()))
sleep(time) list ={'纸短情长.mp3':, '复仇者联盟3.mp4':,'人民的名义.wav':}
threads = []
file_count = range(len(list))
# 创建线程
for file_type,time in list.items():
t = threading.Thread(target=super_player, args=(file_type,time))
threads.append(t)
# 启动线程
if __name__ == '__main__':
for t in file_count:
# [t].setDaemon(True) # setDaemon(True)将线程声明为
# 守护线程,必须在start() 方法调用之前设置,如果
# 不设置为守护线程程序会被无限挂起。子线程启动后,
# 父线程也继续执行下去,当父线程执行完最后一条语句
threads[t].start()
for t in file_count:
threads[t].join()
# t.join()#只对上面的程序加了个join()方法,用于等待线程
# 终止。join()的作用是,在子线程完成运行之前,这个子线
# 程的父线程将一直被阻塞。
print("all over %s" % ctime())

这里我们将list换成字典,定义播放的文件和时长,通过字典的items()方法来循环的取file和time,取到的这两个值用于创建线程。

创建super_player()函数,用于接收file和time,用于确定要播放的文件及时长。运行结果如下:

正在播放 纸短情长.mp3. Sun May  ::
正在播放 复仇者联盟3.mp4. Sun May ::
正在播放 人民的名义.wav. Sun May ::
正在播放 纸短情长.mp3. Sun May ::
正在播放 复仇者联盟3.mp4. Sun May ::
正在播放 人民的名义.wav. Sun May ::
all over Sun May ::
[Finished in .2s]

python多线程(一)的更多相关文章

  1. python多线程学习记录

    1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start() ...

  2. python多线程编程

    Python多线程编程中常用方法: 1.join()方法:如果一个线程或者在函数执行的过程中调用另一个线程,并且希望待其完成操作后才能执行,那么在调用线程的时就可以使用被调线程的join方法join( ...

  3. Python 多线程教程:并发与并行

    转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...

  4. python多线程

    python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...

  5. python 多线程就这么简单(转)

    多线程和多进程是什么自行google补脑 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的 ...

  6. python 多线程就这么简单(续)

    之前讲了多线程的一篇博客,感觉讲的意犹未尽,其实,多线程非常有意思.因为我们在使用电脑的过程中无时无刻都在多进程和多线程.我们可以接着之前的例子继续讲.请先看我的上一篇博客. python 多线程就这 ...

  7. python多线程监控指定目录

    import win32file import tempfile import threading import win32con import os dirs=["C:\\WINDOWS\ ...

  8. python多线程ssh爆破

    python多线程ssh爆破 Python 0x01.About 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程爆破ssh,支持ip表导入,字典数据导入. 主要使用到的是pyth ...

  9. 【python,threading】python多线程

    使用多线程的方式 1.  函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...

  10. <转>Python 多线程的单cpu与cpu上的多线程的区别

    你对Python 多线程有所了解的话.那么你对python 多线程在单cpu意义上的多线程与多cpu上的多线程有着本质的区别,如果你对Python 多线程的相关知识想有更多的了解,你就可以浏览我们的文 ...

随机推荐

  1. 网站开发进阶(六)JSP两种声明变量的区别

    JSP两种声明变量的区别 在JSP中用两种声明变量的方法,一种是在<%! %>内,一种是在<% %>内.他们之间有什么区别呢?我们直接看一个JSP文件来理解. 代码如下: &l ...

  2. Erlang cowboy 架构

    Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Archit ...

  3. WIN7电脑文件莫名其妙被删除后的恢复

    今天早上打开电脑,发现电脑F盘下的WINCE600文件夹下有剩下一小部分文件,绝大部分文件都找不到了,但是我记得自己没有删除过,而且在回收站也没有找到这些被删除的文件,怎恢复呢,今天尝试使用Recov ...

  4. vs 2010调用matlab dll显示窗口核心代码

    matlab代码: figure('NumberTitle','off','menubar','none','toolbar','none','name','Topo Image'); x=0:pi/ ...

  5. SharePoint 自定义列表页面定制续—[保存模板后不能正常使用]

    背景:SharePoint列表的四个基本页样式不是特别的好,所以很多情况都需要重新定制,然而经过定制后,又发生了新的问题,就是存成模板,再建新的列表的时候,定制的页面不能正常显示了. 1. 定制后的页 ...

  6. JS实现鼠标滚动事件,兼容IE9,FF,Chrome.

    <!-- 废话不多说,直接贴代码 --><script type="text/javascript" src="jquery.min.js"& ...

  7. Factor Pattern----工厂模式

    一. 概念 工厂模式就是负责生成其他对象的类或方法,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象,减少代码之间耦合. 二. 使用场景(原因) 工厂模式可以将对象的生产从直接new 一个对 ...

  8. 使用Interlocked在多线程下进行原子操作,无锁无阻塞的实现线程运行状态判断

    巧妙地使用Interlocked的各个方法,再无锁无阻塞的情况下判断出所有线程的运行完成状态. 昨晚耐着性子看完了clr via c#的第29章<<基元线程同步构造>>,尽管这 ...

  9. 前端技术之_CSS详解第四天

    前端技术之_CSS详解第四天 一.第三天的小总结 盒模型box model,什么是盒子? 所有的标签都是盒子.无论是div.span.a都是盒子.图片.表单元素一律看做文本. 盒模型有哪些组成: wi ...

  10. 常见Map 及 ArrayList 是否有序总结

      常见Map 及 ArrayList 是否有序总结 说明:此处的排序 是指: 1: 往集合中插入元素的顺序与遍历元素的顺序的关系: 2: 往对象中插入元素否会根据元素的大小排序 public cla ...