python之单线程、多线程操作

前言

单线程和多线程是什么自行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之单线程、多线程操作_第1张图片
运行结果

二、多线程

多线程,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())

运行结果:

python之单线程、多线程操作_第2张图片
运行结果

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

运行结果:

python之单线程、多线程操作_第3张图片
运行结果

你可能感兴趣的:(python之单线程、多线程操作)