zoukankan      html  css  js  c++  java
  • 多线程

    python使用threading类而不再使用_thread类,下划线表示这是内部类,不应在外部使用

    多线程是如何运行的?

    1、首先线程需要依附于进程,也就是执行任何脚本的时候,都会有一个python进程,然后这个进程下会有一个主线程(线程是程序运行的最小单位)

    2、开启2个子线程运行,这个时后一共有三个线程在运行,1个主线程和2个子线程,他们有可能出现主线程先结束,也有可能出现子线程先结束。

    3、所以一般我们需要使用thread1.join()方法,让主线程等待子线程结束后,再执行下一步。

    4、如果我们开一个线程,就join一次,相当于没有使用多线程,因为我们等待一个线程结束后,才开启下一个。正确的方法应该是一次性启动多个线程(如果是io密集型),然后一起等待,等所有线程都join再进行下一步

    使用方法:

    1、集成threading.Thread类

    2、实现run方法

    3、创建实例,并调用start(),这个函数会执行run方法

    使用模板:

    import threading
    import time

    class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
    threading.Thread.__init__(self) # 必须有,初始化线程
    self.threadID = threadID
    self.name = name
    self.counter = counter

    def run(self):
    print ("开始线程:" + self.name)
    print_time(self.name, self.counter, 5)
    print ("退出线程:" + self.name)

    def print_time(threadName, delay, counter):
    while counter:
    time.sleep(delay)
    print ("%s: %s" % (threadName, time.ctime(time.time())))
    counter = counter - 1

    # 创建新线程
    thread1 = myThread(1, "Thread-1", 1)
    thread2 = myThread(2, "Thread-2", 2)

    # 开启新线程
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    print ("退出主线程")



    这样的方法需要频繁开启和关闭线程,会消耗资源,而且不能控制最大并发。

    合理的方式应该是使用线程池来控制,一次性分配多个线程,然后让任务排队进入线程池里执行


  • 相关阅读:
    LeetCode-860. Lemonade Change
    LeetCode-455.Assign Cookies
    LeetCode-122.Best Time to Buy and Sell Stock II
    LeetCode-438.Find All Anagrams in a String
    LeetCode-50.Pow(x,n)
    LeetCode-236.Lowest Common Ancestor of a Binary Tree
    LeetCode-235.Lowest Common Ancestor of a Binary Search Tree
    LeetCode-98.Validate Binary Search Tree
    LeetCode-18.4Sum
    LeetCode-15.3Sum
  • 原文地址:https://www.cnblogs.com/yjybupt/p/14776033.html
Copyright © 2011-2022 走看看