python程序多线程运行,python 多进程和多线程

  python程序多线程运行,python 多进程和多线程

  本文主要介绍多线程python的实现和多线程的顺序。多线程一般用于同时调用多个函数,cpu时间片依次分配给多个任务。

  00-1010前言一、多线程运行的紊乱二、解决多线程运行紊乱的“加入法”三、线程常用参数汇总。线程()

  

目录

  一般用多线程同时调用多个函数,cpu时间片依次分配给多个任务。的好处是提高cpu的利用率,减少计算机处理多个任务的总时间。缺点是如果有全局变量,调用多个函数会导致全局变量被多个函数修改,导致计算错误,这就需要使用join方法或者设置局部变量来解决问题。Python线程模块用于实现多线程。threading.join()方法保证只有调用join的子线程完成后,cpu才会分配给其他子线程,从而保证线程的有序运行。

  

前言

  首先,我们创建三个实例。T1、t2和t3T1实例调用函数1,T2和T3函数调用函数11。它们都作用于全局变量l1。

  代码如下:

  导入线程,时间

  l1=[]

  #创建RLock锁,获取几次,释放几次

  锁=线程。RLock()

  定义函数1(x,y):

  对于范围(x):内的I

  l1 .追加(I)

  如果i==0:

  时间.睡眠(1)

  end_time=time.time()

  打印( t{}在{}s内完成)。格式(y,end_time -time1))

  定义函数11(x,y):

  对于范围(x):内的I

  l1 .追加(I)

  end_time=time.time()

  打印( t{}在{}s内完成)。格式(y,end_time -time1))

  #2.创建一个子线程:thread类

  if __name__==__main__:

  t1=线程。线程(target=function1,args=(100,1))

  t2=线程。线程(target=function11,args=(100,2))

  t3=线程。线程(target=function11,args=(100,3))

  time1=time.time()

  打印(时间开始于{} 。格式(时间1))

  t1.start()

  t2.start()

  t3.start()

  打印(l1)

  结果如下:

  run file( e :/desktop/temp . py ,wdir=E:/desktop )

  时间从1656年开始。36666 . 66666686667

  t2在0.0s内完成

  t3在0.0s内完成

  [0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,

  25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
t1 is finished in 1.0152690410614014s

  

  我们可以看到,全局变量中开头有两个0,而不是按着0,1,2,3的方式按序填充,所以可以得知全局变量在多线程中是被多个函数无序调用的。为了保证多线程有序调用全局变量,我们可以利用threading.join()的方法。

  

  

二、join方法解决多线程运行无序问题

  我们重写了function1函数,并命名为function2,t1调用function2函数。t2,t3不变。

  代码如下:

  

import threading,time

  l1 = []

  #创建RLock锁,acquire几次,release几次

  lock = threading.RLock()

  def function1(x,y):

   for i in range(x):

   l1.append(i)

   if i == 0:

   time.sleep(1)

   end_time = time.time()

   print("t{} is finished in {}s".format(y,end_time -time1))

  def function11(x,y):

   for i in range(x):

   l1.append(i)

   end_time = time.time()

   print("t{} is finished in {}s".format(y,end_time -time1))

  def function2(x,y):

   for i in range(x):

   l1.append(i)

   if i == 0:

   time.sleep(1)

   end_time = time.time()

   print("t{} is finished in {}s".format(y,end_time -time1))

  #2.创建子线程:thread类

  if __name__ == __main__:

   t1 = threading.Thread(target= function2, args = (100,1))

   t2 = threading.Thread(target= function11, args = (100,2))

   t3 = threading.Thread(target= function11, args = (100,3))

   time1 = time.time()

   print("time starts in {}".format(time1))

   t1.start()

   t1.join()

   t2.start()

   t3.start()

   print(l1)

  结果如下:

  

runfile('E:/桌面/temp.py', wdir='E:/桌面')
time starts in 1656476057.441827
t1 is finished in 1.0155227184295654s
t2 is finished in 1.0155227184295654s
t3 is finished in 1.0155227184295654s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

  

  由此可见,threading.join()方法可以解决多线程无序问题

  

  

三、threading.Thread()的常用参数

  1.group:默认值None,为了实现ThreadGroup类而保留
2.target:在start方法中调用的可调用对象,即需要开启线程的可调用对象,比如函数、方法
3.name:默认为Thread-N,字符串形式的线程名称
4.args:默认为空元组,参数target中传入的可调用对象的参数元组
5.kwargs:默认为空字典{},参数target中传入的可调用对象的关键字参数字典
6.daemon:默认为None

  

  

总结

  到此这篇关于多线程python的实现及多线程有序性的文章就介绍到这了,更多相关python多线程内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为
  • 浅谈python程序的错误-变量未定义的原因,浅谈python程序的错误-变量未定义为,浅谈Python程序的错误-变量未定义
  • Python程序设计与算法基础教程,python算法指南
  • Python程序设计与算法基础教程,python算法指南,Python常用算法学习基础教程
  • ,,8个实用的Python程序你知道几个
  • python程序打包成exe可执行文件,python程序打包成exe后的 运行速度
  • python流程管理,Python程序开发流程
  • Python程序开发案例教程,python程序设计案例实践教程
  • python编程基础与案例集锦,python程序代码实例
  • python程序设计实例教程董付国课后答案,python程序设计第三版董付国
  • 如果在python程序中没有导入相关模块,python外部模块不用导入可以直接使用
  • Python程序语言设计基础,Python编程设计
  • python程序语言的特点,Python编程的特点
  • python程序编写,python编程求素数
  • python向服务器发送数据,python程序如何在服务器部署
  • 留言与评论(共有 条评论)
       
    验证码: