Python 多线程,threading模块,创建子线程的两种方式示例

yipeiwu_com6年前Python基础

本文实例讲述了Python 多线程,threading模块,创建子线程的两种方式。分享给大家供大家参考,具体如下:

GIL(全局解释器锁)是C语言版本的Python解释器中专有的,GIL的存在让多线程的效率变低(哪个线程抢到锁,就执行哪个线程)。在IO密集型程序中,多线程依然比单线程效率高(GIL通过IO阻塞自动切换多线程)。

解决GIL(全局解释器锁)的问题的三种方法:

1、不要用C语言版本的Python解释器。
2、让子线程运行其他语言代码(例如:主线程运行Python代码,子线程运行C语言代码(C语言的动态库))。
3、多进程代替多线程(多进程可以利用多核CPU)。

创建子线程的第一种方式:

demo.py(通过函数名指定子线程的任务):

import threading
def test1():
  print("子线程运行了...")
def main():
  # 通过 target=函数名 的方式定义子线程
  t1 = threading.Thread(target=test1) # 通过target指定子线程要执行的任务。可以通过args=元组 来指定test1的参数。
  t1.start() # 只有在调用start方法后才会创建子线程并执行
  # threading.enumerate() 打印正在执行的线程,包括主线程和子线程
  print(threading.enumerate()) # [<_MainThread(MainThread, started 139724821161728)>, <Thread(Thread-1, started 139724795434752)>]
  # 当子线程没有结束时,主线程也不会结束。 当主线程结束后,所有的子线程也会结束。
if __name__ == "__main__":
  main()

运行结果:

子线程运行了...
[<_MainThread(MainThread, started 7076)>, <Thread(Thread-1, started 2832)>]

创建子线程的第二种方式:

demo.py(通过类来定义子线程):

#coding=utf-8
import threading
# 通过类定义子线程。 继承threading.Thread类
class MyThread(threading.Thread):
  # 开启子线程时,会自动执行run函数
  def run(self):
    print(self.name) # Thread-1 name属性中保存的是当前线程的名字
def main():
  t = MyThread() # 实例化自定义的子线程
  t.start() # 开启子线程
if __name__ == '__main__':
  main()

运行结果:

Thread-1

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

Flask框架工厂函数用法实例分析

本文实例讲述了Flask框架工厂函数用法。分享给大家供大家参考,具体如下: 在我们开始学习FLask的时候,创建应用的实例是用app=Flask(name)来做的,但是当我们想创建多个不...

python下载微信公众号相关文章

python下载微信公众号相关文章

本文实例为大家分享了python下载微信公众号相关文章的具体代码,供大家参考,具体内容如下 目的:从零开始学自动化测试公众号中下载“pytest"一系列文档 1、搜索微信号文章关键字搜索...

Python OpenCV 调用摄像头并截图保存功能的实现代码

0x01 OpenCV安装  通过命令pip install opencv-python 安装 pip install opencv-python 0x02 ...

详解Python命令行解析工具Argparse

最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具。 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间...

python3 模拟登录v2ex实例讲解

闲的无聊。。。 网上一堆,正好练手(主要是新手) # coding=utf-8 import requests from bs4 import BeautifulSoup he...