您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python threading模块的使用指南

51自学网 2021-10-30 22:31:05
  python
这篇教程python threading模块的使用指南写得很实用,希望能帮到您。

1. threding模块创建线程对象

接上述案例,我们可以利用程序阻塞的时间让程序执行后面的任务,可以用多线程的方式去实现。对应的需要我们借助threading模块去实现:
如下所示

import timeimport threadingdef work():"""只有函数对象才能佈田名线积"""print('5.洗茶杯: 1min ' )time.sleep(1)print('6.放茶叶: 1min ' )time.sleep(1)start_time = time .time()print( '1.洗壶: 1min ' )time.s1eep(1)print( '2.灌凉水:1min ' )time.sleep(1)print( '3.烧水: 1min ' )time.sleep(1)print( '4.等水烧开:3min ' )work_thread = threading.Thread(target=work)# 启动线程对象work_thread.start()time.sleep(1) # 5.洗茶杯: 1mintime.sleep(1) # 6.放茶叶: 1mintime.sleep(1)print( '7.泡茶:1min ' )time.sleep(1)print('总共花了: ',time.time() - start_time)

以上案例是一个单线程,需要特别注意的是threading模块操作线程所操作的必须是函数对象。通过threding模块可以把一个普通的函数对象转化为线程对象。

2. threding模块创建多线程

当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下,主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束。

import timeimport threadingdef upload():print("开始上传文件...")time.sleep(2)print("完成上传文件...")def down1oad():print("开始下载文件...")time.s1eep(2)print("完成下载文件...")if __name__ == '__main__':upload_thread = threading.Thread(target=up1oad)up1oad_thread .start()up1oad_thread.join()down1oad_thread = threading.Thread(target=down1oad,daemon=True)down1oad_thread.start()print('主线程结束')

也就是说主线程在分配任务时会创建多个子线程,子线程的任务进度不会阻碍主线程的执行。但是主线程会等待子线程执行任务完之后才结束主线程。也就是说实际上主线程是先执行完任务的,如果你想在主线程执行完之后就结束整个线程的话,那么可以设置守护主线程。

3. 多线程的参数传递

多线程的参数传递用args接受位置参数,用kwargs接受关键字参数。如下所示:

import threadingdef get(ur1,header=None):    print(ur1)    print(header)for url in [ 'https : / /www.baidu.com', 'https:/ /www. soso.com ' ,' https: / /www . 360. com']:    # threading.Threadget_thread = threading. Thread(target=get,args=(ur1, ), kwargs={ ' header ':{ 'user-agent ' : ' pythonrequests'}})    get_thread.start

4. 线程产生的资源竞争

首先我们来看一个案例:

import threadingimport timeimport randomdef add1(n):    for i in range(100) :        time.sleep(random.randint(1,3))        with open( 'he7lo.txt', mode='a', encoding='utf-8 ' ) as f:            f.write(f'in} he1lo wor1d !'+ 'he7lo wor1d !'*1024)            f.write(' /n ')if __name__ == '___main__' :    for n in range(10) :        t1 = threading. Thread(target=add1,args=(n,))        t1.start()

以上就是python threading模块的使用指南的详细内容,更多关于python threading模块的使用的资料请关注51zixue.net其它相关文章!


Pytorch中Softmax和LogSoftmax的使用详解
Django商城项目注册功能的实现
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。