python 多线程

进程:计算机程序是磁盘中可执行的二进制或其他类型数据。他们只有在被读取到内存中、被操作系统调用的时候才开始它们的生命周期。进程是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈,以及其他记录其运行轨迹的辅助数据。操作系统管理在其上面运行的所有进程,并为这些进程公平的分配时间。
线程:所有的线程都运行在同一个进程中,共享相同的运行环境。

1.单线程与多进程

避免使用thread模块,原因是thread不支持守护进程。当主进程退出时,所有的子线程不管他们是否在工作,都会被强行退出。threading模块支持守护线程。

from time import ctime,sleep,time
import threading
def music(list):
    for i in list:
        print("I was listening to %s! %s"%(i,ctime()))
        sleep(2)
def movie(m,loop):
    for i in range(loop):
        print("I was at the %s! %s" % (m, ctime()))
        sleep(5)

if __name__=="__main__":
    start=time()
    music(["寂静之声","一生何求"])
    movie("阿甘正传",2)
    end=time()
    used_time = int(end-start)
    print("Time consuming: %s seconds" % used_time)
from time import ctime,sleep,time
import threading
def music(list):
    for i in list:
        print("I was listening to %s! %s"%(i,ctime()))
        sleep(2)
def movie(m,loop):
    for i in range(loop):
        print("I was at the %s! %s" % (m, ctime()))
        sleep(5)
theads=[]
t1=threading.Thread(target=music,args=(["寂静之声","一生何求"],))
theads.append(t1)
t2=threading.Thread(target=movie,args=("阿甘正传",2))
theads.append(t2)
if __name__=="__main__":
    start=time()
    for i in theads:
        i.start()
    for i in theads:
        i.join()
    end=time()
    used_time = int(end-start)
    print("Time consuming: %s seconds" % used_time)

2.自定义线程类

from time import ctime,sleep,time
import threading
class MyThread(threading.Thread):
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self)
        self.func = func
        self.args = args
        self.name = name
    def run(self):
        self.func(*self.args)
def super_play(file_, t):
    for i in range(2):
        print("Start playding: %s! %s"% (file_,ctime()))
        sleep(t)
lists={"天边.mp3":3,"廊桥遗梦.rmvb":5,"壮志凌云。avi":4}
lists_len = range(len(lists))
threads = []
for file,t in lists.items():
    t = MyThread(super_play,(file,t),super_play.__name__)
    threads.append(t)
if __name__=="__main__":
    start = time()
    for i in lists_len:
        threads[i].start()
    for i in lists_len:
        threads[i].join()
    end = time()
    ge = round((end-start),1)
    print("共耗时%s秒"%ge)

扩展:关于__name__

class TestName():
    def func1(self):
        print("执行func1")
    print("func1.__name__:",func1.__name__)
    def func2(self):
        print("执行func2")
    print("func2.__name__:",func2.__name__)
if __name__=="__main__":
    print("TestName.__name__:",TestName.__name__)
    print("py文件__name__:", __name__)
posted on 2018-12-02 09:29  singleSpace  阅读(131)  评论(0编辑  收藏  举报