Python threading的使用方法解析

yipeiwu_com6年前Python基础

一、 例子:我们对传参是有要求的必须传入一个元组,否则报错

import _thread as thread
import time
def loop1(in1):
  print("Start loop 1 at:", time.ctime())
print("我是参数", in1)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def loop2(in1, in2):
  print("Start loop 2 at:", time.ctime())
print("我是参数", in1, "和参数 ", in2)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def main():
  print("Starting at:", time.ctime())
thread.start_new_thread(loop1, ("liuming", ))
# 上面我们传参的时候, 我用的是:(“ liuming”), 这里面是没有逗号的, 结果编译报错, 告诉我, 这里面必须传入元组
# 因此, 我才在里面加了一个逗号, 使其变成一个元组
thread.start_new_thread(loop2, ("zhanglei", "liuhao"))
print("All done at:", time.ctime())
if __name__ == "__main__":
  main()
while True:
  time.sleep(10)
​

二、threading的使用

直接利用threading.Thread生成Thread的实例

格式:

t= threading.Thread(target=函数体,args=(,))#参数args要传递元组

​t.start()#启动多线程

t.join()#等待多线程执行完成

def main():
  print("Start at :", time.ctime())
t1 = threading.Thread(target = loop1, args = ("王老大", ))
t1.start()# 启动多线程
t2 = threading.Thread(target = loop2, args = ("孙子", "好吗"))
t2.start()
t1.join()
t2.join()
print("End at :", time.ctime())
if __name__ == "__main__":
  main()

从上面可以看出来,我们启动了两个线程,但是这两个线程执行完了才打印​最后一个结束语句。

2.守护线程

​格式:线程.setDaemon(True)

作用​:

(1)如果在程序中将子线程设置为守护线程,则子线程会在主线程结束的时候自动退出​;

(2)一般认为,守护线程不重要或者不允许脱离子线程而独立运行;

(3)守护线程能否有效果和环境有关系

注意点:该语句一定要写在start语句之前,否则就会把子程序无限时间挂起,运行报错,​如:

def fun():
  print("Start fun")
time.sleep(2)
print("End fun")
​print('Main thread')
t3 = threading.Thread(target = fun, args = ())
t3.setDaemon(True)
t3.start()
time.sleep(1)
print("Main thread End")

​解释:我们可以看出主线程结束后(即打印完了”Main thread End")后,我们的子线程的最后一个打印没有出来,程序就结束了,说明主线程结束,子线程无论执行到哪里都会被kill掉,和我们的预期一样。

三、源码

d24_2_usage_of_threading.py

地址:https://github.com/ruigege66/Python_learning/blob/master/d24_2_usage_of_threading.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python实现删除文件中含“指定内容”的行示例

本文实例讲述了Python实现删除文件中含指定内容的行。分享给大家供大家参考,具体如下: #!/bin/env python import shutil, sys, os darra...

python常见字符串处理函数与用法汇总

本文实例讲述了python常见字符串处理函数与用法。分享给大家供大家参考,具体如下: 1、find 作用:在一个较长字符串中查找子串。返回子串所在位置的最左端索引,如果没有找到则返回-...

win10子系统python开发环境准备及kenlm和nltk的使用教程

前言 因为NLP作业需要用到kenlm,而kenlm在linux下更为方便。本人win10之前开启了子系统,所以就打算在子系统下进行相关作业的完成。 首先开启win10子系统,网上教...

Python实现将xml导入至excel

Python实现将xml导入至excel

最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意。...

Python cookbook(数据结构与算法)将序列分解为单独变量的方法

本文实例讲述了Python cookbook(数据结构与算法)将序列分解为单独变量的方法。分享给大家供大家参考,具体如下: 如果对象是可迭代的(任何序列),则可以进行分解操作,包括元组、...