用python写多线程
import threading #首先导入threading 模块,这是使用多线程的前提
from time import ctime,sleep
def music(func):
for i in range():
print "I was listening to" +func+ctime()
sleep()
def movie(func):
for i in range():
print "I was at the %s! %s" %(func,ctime())
sleep()
def eat_time(func):
for i in range():
print 'l am eatting food %s. %s' %(func,ctime())
sleep()
threads = []
t1 = threading.Thread(target=music,args=(u'爱情买卖',))
threads.append(t1) #创建了threads数组,创建线程t1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。
t2 = threading.Thread(target=movie,args=(u'阿凡达',))
threads.append(t2)
t3 = threading.Thread(target=eat_time,args=(u'爆米花',))
threads.append(t3) if __name__ == '__main__':
for t in threads:
t.setDaemon(True) #setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句后,没有等待子线程,直接就退出了,同时子线程也一同结束。
t.start() #开始线程活动
print "夜深了我要睡觉了!!!!!!!!!!!!!!!!!!!!!!!!!!!! %s" %ctime() #此句代码为主线程
运行的结果是:
I was listening to爱情买卖Wed Nov ::
I was at the 阿凡达! Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
夜深了我要睡觉了!!!!!!!!!!!!!!!!!!!!! !!!!!Wed Nov :: 2016 这是主线程
l am eatting food 爆米花. Wed Nov ::
I was listening to爱情买卖Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
I was listening to爱情买卖Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
I was at the 阿凡达! Wed Nov ::
如果我们把上面的程序结尾处添加t.jion()如下:
if __name__ == '__main__':
for t in threads:
t.setDaemon(True)
t.start()
t.join() print "夜深了我要睡觉了!!!!!!!!!!!!!!!!!!!!!! %s" %ctime()
运行结果:
I was listening to爱情买卖Wed Nov ::
I was at the 阿凡达! Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
I was listening to爱情买卖Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
I was listening to爱情买卖Wed Nov ::
l am eatting food 爆米花. Wed Nov ::
I was at the 阿凡达! Wed Nov ::
夜深了我要睡觉了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Wed Nov ::
我们只对上面的程序加了个join()方法,用于等待线程终止。join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
注意: join()方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程。
下面是将上面的程序进行简化!
from time import sleep, ctime
import threading def muisc(func):
for i in range():
print 'Start playing: %s! %s' %(func,ctime())
sleep() def move(func):
for i in range():
print 'Start playing: %s! %s' %(func,ctime())
sleep() def player(name):
r = name.split('.')[]
if r == 'mp3':
muisc(name)
else:
if r == 'mp4':
move(name)
else:
print 'error: The format of %s is not recognized!' %r list = ['爱情买卖.mp3','阿凡达.mp4','在吃东西.pic','简单爱.mp3','星球大战.mp4'] threads = []
files = range(len(list)) #创建线程
for i in files:
t = threading.Thread(target=player,args=(list[i],))
threads.append(t) if __name__ == '__main__':
#启动线程
for i in files:
threads[i].start()
threads[i].join() #主线程
print 'end:%s' %ctime()
运行结果:
Start playing: 爱情买卖.mp3! Wed Nov ::
Start playing: 爱情买卖.mp3! Wed Nov ::
Start playing: 阿凡达.mp4! Wed Nov ::
Start playing: 阿凡达.mp4! Wed Nov ::
error: The format of pic is not recognized!
Start playing: 简单爱.mp3! Wed Nov ::
Start playing: 简单爱.mp3! Wed Nov ::
Start playing: 星球大战.mp4! Wed Nov ::
Start playing: 星球大战.mp4! Wed Nov ::
end:Wed Nov ::
下面我们来做一个超级播放器!
from time import sleep, ctime
import threading def super_player(file,time):
for i in range():
print 'Start playing: %s! %s' %(file,ctime())
sleep(time) #播放的文件与播放时长
list = {'爱情买卖.mp3':,'阿凡达.mp4':,'我和你.mp3':} threads = []
files = range(len(list)) #创建线程
for file,time in list.items():
t = threading.Thread(target=super_player,args=(file,time))
threads.append(t) if __name__ == '__main__':
#启动线程
for i in files:
threads[i].start()
threads[i].join() #主线程
print 'end:%s' %ctime()
运行结果:
Start playing: 爱情买卖.mp3! Thu Nov ::
Start playing: 爱情买卖.mp3! Thu Nov ::
Start playing: 我和你.mp3! Thu Nov ::
Start playing: 我和你.mp3! Thu Nov ::
Start playing: 阿凡达.mp4! Thu Nov ::
Start playing: 阿凡达.mp4! Thu Nov ::
end:Thu Nov ::
下面是创建一个自己的多线程类:
import threading
from time import sleep, ctime class MyThread(threading.Thread): #创建MyThread类,用于继承threading.Thread类
def __init__(self,func,args,name=''): # __init__()使用类的初始化方法对func、args、name等参数进行初始化
threading.Thread.__init__(self)
self.name=name
self.func=func
self.args=args def run(self):
apply(self.func,self.args)
#apply(func [, args [, kwargs ]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数。
args是一个包含将要提供给函数的按位置传递的参数的元组。如果省略了args,任何参数都不会被传递,kwargs是一个包含关键字参数的字典 def super_play(file,time):
for i in range():
print 'Start playing: %s! %s' %(file,ctime())
sleep(time) list = {'爱情买卖.mp3':,'阿凡达.mp4':} #创建线程
threads = []
files = range(len(list)) for k,v in list.items():
t = MyThread(super_play,(k,v),super_play.__name__)
threads.append(t) if __name__ == '__main__':
#启动线程
for i in files:
threads[i].start()
threads[i].join() #主线程
print 'end:%s' %ctime()
运行结果:
Start playing: 爱情买卖.mp3! Thu Nov ::
Start playing: 爱情买卖.mp3! Thu Nov ::
Start playing: 阿凡达.mp4! Thu Nov ::
Start playing: 阿凡达.mp4! Thu Nov ::
end:Thu Nov ::
用python写多线程的更多相关文章
- python 写的http后台弱口令爆破工具
今天来弄一个后台破解的Python小程序,哈哈,直接上代码吧,都有注释~~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
- Python实现多线程HTTP下载器
本文将介绍使用Python编写多线程HTTP下载器,并生成.exe可执行文件. 环境:windows/Linux + Python2.7.x 单线程 在介绍多线程之前首先介绍单线程.编写单线程的思路为 ...
- 教你用python写:HDU刷题神器
声明:本文以学习为目的,请不要影响他人正常判题 HDU刷题神器,早已被前辈们做出来了,不过没有见过用python写的.大一的时候见识了学长写这个,当时还是一脸懵逼,只知道这玩意儿好屌-.时隔一年,决定 ...
- python写zip破解器
浏览桌面依然平静,!!!!等等..怎么有个压缩包 打开一看!!!156.txt???waht the fuck? 卧槽还有密码!!!!!! 但是我不知道╮(╯▽╰)╭该怎么办呢! 很简单,python ...
- Python之多线程和多进程
一.多线程 1.顺序执行单个线程,注意要顺序执行的话,需要用join. #coding=utf-8 from threading import Thread import time def my_co ...
- python的多线程到底有没有用?
在群里经常听到这样的争执,有人是虚心请教问题,有人就大放厥词因为这个说python辣鸡.而争论的核心无非就是,python的多线程在同一时刻只会有一条线程跑在CPU里面,其他线程都在睡觉.这是真的吗? ...
- Python【多线程与多进程】
import time,threading print("=======串行方式.并行两种方式调用run()函数=======")def run(): print('哈哈哈') # ...
- python学习笔记(二十九)为什么python的多线程不能利用多核CPU
问题:为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快原因:因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行 ...
- 【转】使用python进行多线程编程
1. python对多线程的支持 1)虚拟机层面 Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势.使 ...
随机推荐
- C#学习笔记(36)——事件传值(非常牛逼!)
说明(2018-4-9 23:01:20): 1. 这个真的想了很久,从晚上八点半写完上一篇博客,一直想到现在11点,以为没有办法实现了,结果看到一篇CSDN的文章,虽然没有看明白,但是看到一行代码后 ...
- 【iCore4 双核心板_uC/OS-II】例程三:任务的挂起与恢复
一.实验说明: 当一个任务正在运行的时候,由于某种情况可能需要终止运行一段时间,终止的这段时间就是 所谓的任务的挂起,可以由该任务自身或者其他任务来挂起一个任务.当被挂起的任务需要再次运 行的时候,可 ...
- [Java并发编程(五)] Java volatile 的实现原理
[Java并发编程(五)] Java volatile 的实现原理 简介 在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 sync ...
- 关于Cocos的内存管理机制引发一些异常的解决方案
错误:引发了异常: 读取访问权限冲突. this 是 0xDDDDDDDD.或者hero是 0xDDDDDDDD.hero是在GameController里创建的对象 这个的意思是this所指向的内存 ...
- SAR指标(转)
转自(https://zhidao.baidu.com/question/187156399.html) SAR指标又叫抛物线指标或停损转向操作点指标,其全称叫“Stop and Reverse,缩写 ...
- ajax-page局部刷新分页实例
1.引用文件:connect.php <?php $host="localhost"; $db_user="root"; $db_pass="r ...
- c++ 格式字符串说明
C++的格式化字符串经常用作格式化数字的输出.字符串合并和转换等等很多场合. 1. 格式化规定符 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号 作用 ─ ...
- javascript转义unicode十六进制编码且带有反斜杠后的html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- thinkphp3.2在nginx下的配置
最近一直没用nginx 昨天将tp3.2的项目部署到Ubuntu下的nginx下,发现忘记怎么配置的了 特将配置方式记录下来,以方便日后查找 服务器nignx 配置文件 server { listen ...
- Apache kylin进阶——元数据篇
一.Apache kylin元数据的存储 Apache kylin的元数据包括 立方体描述(cube description),立方体实例(cube instances)项目(project).作业( ...