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

    python多线程模块包括:thread、threading、Queue

    实现模块

            thread:多线程的底层支持模块,一般不建议使用;

            threading:对thread进行了封装,将一些线程的操作对象化。

       Queue:提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递

    threading模块:对thread进行了封装,将一些线程的操作对象化。

            Thread 线程类,这是我们用的最多的一个类,你可以指定线程函数执行或者继承自它都可以实现子线程功能;

            Timer与Thread类似,但要等待一段时间后才开始运行;

            Lock 锁原语,这个我们可以对全局变量互斥时使用;

            RLock 可重入锁,使单线程可以再次获得已经获得的锁;

            Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”;

            Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活;

            Semaphore为等待锁的线程提供一个类似“等候室”的结构;

            BoundedSemaphore 与semaphore类似,但不允许超过初始值;

    其中threading.Thread类

            是你主要的线程类,可以创建进程实例。该类提供的函数包括:

            getName(self) 返回线程的名字

            isAlive(self) 布尔标志,表示这个线程是否还在运行中

            isDaemon(self) 返回线程的daemon标志

            join(self, timeout=None) 程序挂起,直到线程结束,如果给出timeout,则最多阻塞timeout秒

            run(self) 定义线程的功能函数

            setDaemon(self, daemonic) 把线程的daemon标志设为daemonic

            setName(self, name) 设置线程的名字

            start(self) 开始线程执行

    Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。

      Queue提供的类

              Queue队列

              LifoQueue后入先出(LIFO)队列

              PriorityQueue 优先队列

    开启线程的方法有两种

    方法一:创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行

    # -*- coding: utf-8 -*-
    import threading
    
    def thread_fun(num):
        for n in range(0, int(num)):
            print " %s, num: %s" % (threading.currentThread().getName(), n)
    
    def main(thread_num):
        thread_list = list()
        # 先创建线程对象
        for i in range(0, thread_num):
            thread_name = "thread_%s" % i
            thread_list.append(threading.Thread(target=thread_fun, name=thread_name, args=(20,)))
    
            # 启动所有线程
        for thread in thread_list:
            thread.start()
    
            # 主线程中等待所有子线程退出
        for thread in thread_list:
            thread.join()
    
    if __name__ == "__main__":
        main(3)

    方法二:是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里

    # -*- coding: utf-8 -*-
    
    import threading
    
    class MyThread(threading.Thread):
        def __init__(self):
            threading.Thread.__init__(self)
    
        def run(self):
            print "I am %s" % self.name
    
    if __name__ == "__main__":
        for thread in range(0, 5):
            t = MyThread()
            t.start()
  • 相关阅读:
    Selenium3+python3自动化(二十九)--绕过验证码(add_cookie)
    Selenium3+python3自动化(二十八)--cookie相关操作
    Selenium3+python3自动化(二十七)--webdriver中等待,显式等待(WebDriverWait),强制等待sleep(),隐式等待implicitly_wait()
    Selenium3+python3自动化(二十七)--爬页面源码(page_source)
    Selenium3+python3自动化(二十六)--判断元素存在
    Selenium3+python3自动化(二十五)--获取元素属性,driver.title,driver.text,driver.tag_name,get_attribut("属性名"),输入框文本值get_attribute("value"),driver.name
    Selenium3+python3自动化(二十四)--获取百度输入联想词
    Selenium3+python3自动化(二十三)--文件上传(send_keys)
    Selenium3+python3自动化(二十二)--窗口多标签处理方法总结
    POJ
  • 原文地址:https://www.cnblogs.com/seablog/p/7054320.html
Copyright © 2011-2022 走看看