码迷,mamicode.com
首页 > 编程语言 > 详细

6 线程threading

时间:2017-12-03 15:36:11      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:idt   process   http   time   多线程   子类   blog   for   有一个   

1.第1种方式:threading模块

  1)单线程执行

#-*- coding:utf-8 -*-
import time

def main():
    print("我错了。。。")
    time.sleep(1)


if __name__ == "__main__":
    start_time = time.time()
    for i in range(5):
        main()
    end_time = time.time()
    print("the run time is %s"%(end_time-start_time))

    技术分享图片

 

  2)多线程执行

  • 主线程会等待所有的子线程结束后才结束

#-*- coding:utf-8 -*-
from threading import Thread
import time

#1.如果多个线程执行的都是同一个函数的话,各自之间不会有影响,各是各的
def main():
    print("我错了。。。")
    time.sleep(1)


if __name__ == "__main__":
    start_time = time.time()
    for i in range(5):
       # Process(target=test)  Process进程完成多任务
       t = Thread(target=main)
       t.start()

    end_time = time.time()
    print("the run time is %s"%(end_time-start_time))

 

    技术分享图片

 

 

2.线程和进程的区别联系

  • 进程是资源分配的单位,资源,内存,屏幕,等
  • 线程是cpu调度的单位

       技术分享图片

 

  •  1个进程内有1个主线程,主线程可以创建多个子线程
  • 主线程任务完成,要等待子线程的任务完成

      技术分享图片

 

3.第2种方式:Thread子类创建线程

#coding=utf-8
import threading
import time

class MyThread(threading.Thread):
    def run(self):
        for i in range(3):
            time.sleep(1)
            msg = "I‘m "+self.name+ @ +str(i) #name属性中保存的是当前线程的名字
            print(msg)


if __name__ == __main__:
    t = MyThread()
    t.start()

      技术分享图片

 

4.僵尸进程,孤儿进程,0号1号进程

  1. 僵尸进程:子进程结束,父进程还没有给它收尸,此时的子进程成为僵尸进程
  2. 孤儿进程:父进程提前结束,没有等待子进程结束,此时的子进程成为孤儿进程
  3. 0号进程负责切换任务
  4. 1号进程负责生成,销毁 其他子进程

       技术分享图片

    技术分享图片

 

 5.线程的执行顺序:无序

  •  执行结果:(运行的结果可能不一样,但是大体是一致的)
#coding=utf-8
import threading
import time

class MyThread(threading.Thread):
    def run(self):
        for i in range(3):
            time.sleep(1)
            msg = "I‘m "+self.name+ @ +str(i)
            print(msg)
def test():
    for i in range(5):
        t = MyThread()
        t.start()
if __name__ == __main__:

 

    技术分享图片

 

  • python解释器会屏蔽底层硬件的差异

    技术分享图片

6. 总结

  1. 每个线程一定会有一个名字,尽管上面的例子中没有指定线程对象的name,但是python会自动为线程指定一个名字。
  2. 当线程的run()方法结束时该线程完成。
  3. 无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。
  4. 线程的几种状态

    技术分享图片

 

6 线程threading

标签:idt   process   http   time   多线程   子类   blog   for   有一个   

原文地址:http://www.cnblogs.com/venicid/p/7966129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!