python threading模块的使用指南
作者:松鼠爱出饼干 发布时间:2023-08-10 07:51:59
标签:python,threading
目录
1. threding模块创建线程对象
2. threding模块创建多线程
3. 多线程的参数传递
4. 线程产生的资源竞争
1. threding模块创建线程对象
接上述案例,我们可以利用程序阻塞的时间让程序执行后面的任务,可以用多线程的方式去实现。对应的需要我们借助threading模块去实现:
如下所示
import time
import threading
def 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.洗茶杯: 1min
time.sleep(1) # 6.放茶叶: 1min
time.sleep(1)
print( '7.泡茶:1min ' )
time.sleep(1)
print('总共花了: ',time.time() - start_time)
以上案例是一个单线程,需要特别注意的是threading模块操作线程所操作的必须是函数对象。通过threding模块可以把一个普通的函数对象转化为线程对象。
2. threding模块创建多线程
当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置多线程时,主线程会创建多个子线程,在python中,默认情况下,主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束。
import time
import threading
def 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 threading
def get(ur1,header=None):
print(ur1)
print(header)
for url in [ 'https : / /www.baidu.com', 'https:/ /www. soso.com ' ,' https: / /www . 360. com']:
# threading.Thread
get_thread = threading. Thread(target=get,args=(ur1, ), kwargs={ ' header ':{ 'user-agent ' : ' pythonrequests'}})
get_thread.start
4. 线程产生的资源竞争
首先我们来看一个案例:
import threading
import time
import random
def 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()
来源:https://www.cnblogs.com/qshhl/p/14844989.html


猜你喜欢
- 导语之前有很多小伙伴说想学习一下多线程图片下载器,虽然好像已经过去很久了,不过还是上来安排一波吧。至于题目为什么说是构建一个小型数据集,因为
- 一、问题描述如题,在使用pip install xxx的方法安装python库,或者是基于python的软件时,报错“E
- 什么是mtcnn和facenet1、mtcnnMTCNN,英文全称是Multi-task convolutional neural netw
- 将VS2017上配置OpenCV4.1.0的过程记录于此。准备工具:OpenCV:4.1.0IDE:VS2017安装环境:Win10 &nb
- 用read_csv读数据遇到分隔符问题的两种解决方式import pandas as pd1.更改read_csv函数中的传参&ld
- 插入数据insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);insert into user(user
- 过年前产假归来,jmeter很多知识生疏了,这两天打开jmeter摸索了几下,老了记不住,还是准备弄个jmeter系列随笔吧。言归正传,使用
- 字符串是Python中最常用的数据类型1、创建字符串1.1 使用 ’ ’ 或 " &quo
- DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)这些函
- 1.复制表结构及数据到新表CREATE TABLE 新表SELECT * FROM 旧表 2.只复制表结构到新表CREATE TABLE 新
- ASPError Object 这个新增的,内置与ASP 3.0中的对象提供了一个以往版本中没有的专门用来处理错误的对象,这样,我们来操纵错
- 可以使用以下3种方法创建数据库。一.使用SQL Server Management Studio创建数据库二..使用CREATE DATAB
- 环境搭建1.安装uwsgi、nginx和djangoapt install nginxpip install uwsgipip instal
- 摘要: 三次握手,四次挥手意思是tcp建立连接时需要三次交互来完成,A发起连接A --- SYN --> BA
- 本文为大家解析了python实现4名牌手洗牌发牌的问题,供大家参考,具体内容如下编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)
- 总括pandas的索引函数主要有三种:loc 标签索引,行和列的名称iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0i
- 我试了网上提供的一些方法都不行,最后还是自己用SQL解决了些问题。 1 在查询分析器里面选中出问题的数据库,然后输入: Exec sp_co
- 无论是对于刚接触编程的初学者,还是已经工作的程序员,哪一门编程语言更火,更有价值和前景,似乎是永远有争议的话题。下面来对比说以下python
- 关于MySQL8的WITH查询学习前言:对于逻辑复杂的sql,with可以大大减少临时表的数量,提升代码的可读性、可维护性MyS
- 在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV。两种方式都需要简单的几行代码,