前言
单线程和多线程是什么自行google补脑
对于python 单线程和多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,对单线程和多线程有个初步的认识。
一、单线程
单线程, 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做微信聊天和看电影两件事儿,那么一定要先排一下顺序。
Demo-1
#coding:utf-8
import threading
from timeimport ctime,sleep
def weixin(func):
for iin range(2):
print(u'我在用微信同 %s 进行反馈、总结问题.%s' %(func,ctime()))
sleep(2)
def movie(func):
for iin range(2):
print(u'我在看电影 %s! %s ' %(func,ctime()))
sleep(5)
if __name__ =='__main__':
weixin(u'软件测试工程师')
movie(u'红海行动')
print('all over %s' %ctime())
运行结果:
二、多线程
多线程,python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点,在threading 得到了弥补,为了不浪费时间,所以我们直接学习threading 就可以了
threading.Thread里面几个参数介绍
class Thread(_Verbose)
__init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None)
*group*:group参数必须为空,参数group是预留的,用于将来扩展;
参数args和kwargs分别表示调用target时的参数列表和关键字参数。
*target*: 参数target是一个可调用对象(也称为活动[activity]),在线程启动后执行
*name*: 参数name是线程的名字。默认值为“Thread-N“,N是一个数字。
*args*:传递给线程函数target的参数,他必须是个tuple类型.
*kwargs*:kwargs表示关键字参数。字典类型 {}.
Demo-2:
#coding:utf-8
import threading
from timeimport ctime,sleep
def weixin(func):
for iin range(2):
print(u'我在用微信同%s 进行反馈、总结问题.%s' %(func,ctime()))
sleep(2)
def movie(func):
for iin range(2):
print(u'我在看电影<%s>!%s ' %(func,ctime()))
sleep(2)
threads = []
t1 = threading.Thread(target=weixin(func=u'软件测试工程师'))
threads.append(t1)
t2 = threading.Thread(target=movie(func=u'红海行动'))
threads.append(t2)
if __name__ =='__main__':
#weixin(u'软件测试工程师')
#movie(u'红海行动')
# print('all over %s' %ctime())
for tin threads:
t.start()
print('all over %s' %ctime())
运行结果:
Demo-3:
import threading
from timeimport ctime,sleep
def weixin(func):
for iin range(2):
print(u'我在用微信同%s 进行反馈、总结问题.%s' %(func,ctime()))
sleep(2)
def movie(func):
for iin range(2):
print(u'我在看电影<%s>!%s ' %(func,ctime()))
sleep(2)
threads = []
#t1 = threading.Thread(target=weixin(func=u'软件测试工程师'))
t1 = threading.Thread(target=weixin,args=("软件测试工程师",))
threads.append(t1)
#t2 = threading.Thread(target=movie(func=u'红海行动'))
t2 = threading.Thread(target=movie,kwargs={"func":"红海行动"})
threads.append(t2)
if __name__ =='__main__':
#weixin(u'软件测试工程师')
#movie(u'红海行动')
# print('all over %s' %ctime())
for tin threads:
t.start()
print('all over %s' %ctime())
运行结果: