在Python3中可以通过两种方式来创建线程

1.通过threading.Thread直接在线程中运行函数
2.通过继承threadting.Thread类来创建线程

用threading.Thread直接在线程中运行函数

    threadting.Thread基本使用方法Thread(group=None,target=None,name=None,args=(),kwargs={},*,daemon=None)target:要运行的函数   args:传入函数的参数元组eg:import threadingdef thrfun(x,y):for i in range(x,y):print(str(i*i)+':')ta = threading.Thread(target=thrfun,args=(1,6))tb = threading.Thread(target=thrfun,args=(16,21))ta.start()tb.start()

通过继承threading.Thread类来创建线程

这种方法只要重载threading.Thread类的run()方法,然后调用类的start()就能创建线程,并运行run()函数中的代码。

---------------------------------------------------------------------
--注:我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
---------------------------------------------------------------------import threadingclass myThread(threading.Thread):def __init__(self,mynum):super().__init__()self.mynum = mynumdef run(self):for i in range(self.mynum,self.mynum+5):print(str(i * i) + ':')ma = myThread(1)mb = myThread(16)ma.start()mb.start()

线程类Thread

join([timeout]):当某个线程或函数执行时需等另一个线程完成操作后才能继续,则应调用另一个线程的join()方法,可选参数timeout用于指定线程运行的最长时间。
isAlive():用于查看线程是否运行
name属性是线程设置的线程名
daemon属性用来设置线程是否随主线程退出而退出,属性值为True是不会随主线程退出而退出。

    eg:import threadingimport timedef thrfun(x,y,thr=None):if thr:thr.join()else:time.sleep(2)for i in range(x,y):print(str(i * i) + ':')ta = threading.Thread(target=thrfun,args=(1,6))tb = threading.Thread(target=thrfun,args=(16,21,ta))ta.start()tb.start()

线程运行的函数thrfun()若传递函数中包括一个线程实例,则调用join()方法并等待其结束后才能运行,否则,睡眠2秒。
Python中可以使用threading模块中的对象Lock和RLock(可重入锁)进行简单的线程同步,对于同一时刻只允许一个线程操作的数据对象,可以把操作过程放在Lock和RLock的acquire方法和release方法之间。RLock可以在同一调用链中多次请求不会锁死,Lock则会锁死。

基本使用方法:

    lock = threading.RLock()  #创建lock对象lock = acquire()   #开始锁定pass               #访问或操作多个线程共享数据lock.release()     #释放锁这两个方法前后调用次数要一致才能真正释放。使用RLock,代码如下:import threadingimport timeclass myThread(threading.Thread):def run(self):global xlock.acquire()for i in range(3):x += 10time.sleep(1)print(x)lock.release()x = 0lock = threading.RLock()def main():thrs = []for item in range(5):thrs.append(myThread())for item in thrs:item.start() if __name__ == '__main__':main(

Python基础--线程相关推荐

  1. Python基础---线程

    调用方式 python的线程调用有两种方式.一种是直接调用,一种是继承式调用 直接调用 import threading,time#方法一 def run(n):print(n)time.sleep( ...

  2. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  3. Python基础教程:线程操作(oncurrent模块)详解

    进程是cpu资源分配的最小单元,一个进程中可以有多个线程. 线程是cpu计算的最小单元. 对于Python来说他的进程和线程和其他语言有差异,是有GIL锁. GIL锁 GIL锁保证一个进程中同一时刻只 ...

  4. Python基础之线程(Thread)

    进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行 ...

  5. Python进阶并发基础--线程,全局解释器锁GIL由来,如何更好的利用Python线程,

    全局解释器锁GIL 官方对于线程的介绍: 在 CPython 中,由于存在全局解释器锁,同一时刻只有一个线程可以执行 Python代码(虽然某些性能导向的库可能会去除此限制).如果你想让你的应用更好地 ...

  6. python删除线程,python线程基础

    一 基本概念 1 并行和并发 1 并行,parallel 同时做某些事,可以互不干扰的同一时刻做几件事 如高速公路上的车道,同一时刻,可以有多个互不干扰的车运行 在同一时刻,每条车道上可能同时有车辆在 ...

  7. 8.Python基础学习笔记day8-正则表达式、网络编程、进程与线程

    8.Python基础学习笔记day8-正则表达式.网络编程.进程与线程 一.正则表达式 ''' 1. [1,2,3,4]中任意取3个元素排列: A43 = 4x3x2 = 24itertools.pe ...

  8. Python基础 - 第九天 - paramiko模块、进程、线程

    本篇内容: 1.paramiko模块使用 2.进程.线程简介 3.python调用线程的方法 4.join - 等待线程执行 5.守护线程 6.GIL - 全局解释器锁 7.互斥锁 8.信号量 9.事 ...

  9. python基础主要内容_python基础—python的介绍

    编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以 ...

最新文章

  1. Android的一些属性使用
  2. 阻塞 、非阻塞;同步、异步
  3. [Dart] Flutter开发中的几个常用函数
  4. 置信区间估计 预测区间估计_估计,预测和预测
  5. 详解Android Touch事件的传递机制
  6. 天猫公布618战报 苹果2分45秒破亿 你贡献了多少?
  7. Ubuntu18.04 melodic 安装与下载ROS
  8. android扫描局域网中的所有ip,NMAP扫描局域网内在线IP
  9. 【工具】IDEA打包jar包
  10. js数组操作方法 concat
  11. euclidean loss
  12. Cesium.js解析第一篇 Cartesian3
  13. 智慧景区人员定位方案
  14. 亿道丨三防平板丨加固平板丨三防工业平板丨航空航天应用
  15. 计算机电缆的表示方式,各种电缆型号的表示方法
  16. 解读《领域驱动设计 软件核心复杂性应对之道》(一)
  17. 数字电路学习——三极管的使用
  18. 简练软考知识点整理-项目配置审核
  19. 安科瑞能效管理系统在地下污水处理厂中的应用
  20. C++:STL教程从入门到精通

热门文章

  1. visual studio code python插件下载_visual studio code 的必装推荐插件plugin, vscode, vsc
  2. mysql 安装只有一半_记一次MySQL安装出现的坑爹问题。。。
  3. SpringMVC-开启静态资源访问权限
  4. Windows——桌面快捷键Ctrl+Z撤销的文件恢复解决方案
  5. Visual C++——定时刷新重绘窗口[WM_PAINT消息]解决方案
  6. DefaultSerializer requires a Serializable payload but received an object of type
  7. Vue.js-Day04-AM【父子组件通信(父传子、子传父)、动态组件、组件的生命周期、动画】
  8. Runtime底层原理--动态方法解析总结
  9. CTF——Web——MD5漏洞
  10. XSS学习-XSS挑战之旅(二)