python threading模块的使用指南

作者:松鼠爱出饼干 时间:2023-08-10 07:51:59 

目录
  • 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

标签:python,threading
0
投稿

猜你喜欢

  • 关于VSCode 配置使用 PyLint 语法检查器的问题

    2023-06-18 17:10:33
  • python实现数通设备tftp备份配置文件示例

    2022-12-02 13:59:21
  • python实现简单井字棋游戏

    2023-08-08 21:38:01
  • 可以让程序告诉我详细的页面错误和数据库连接错误吗?

    2009-11-01 18:01:00
  • javascript中if和switch,==和===详解

    2024-04-22 13:23:28
  • php tpl模板引擎定义与使用示例

    2023-11-14 22:04:49
  • Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)

    2023-03-25 16:23:00
  • Python机器学习算法库scikit-learn学习之决策树实现方法详解

    2023-07-26 20:44:28
  • Asp编写不再让人讨厌的自动弹出窗口

    2007-09-29 12:16:00
  • SQL语句 一个简单的字符串分割函数

    2011-10-24 20:06:33
  • Python文件操作之合并文本文件内容示例代码

    2021-06-24 13:58:05
  • Oracle 用户权限管理方法

    2009-08-15 10:54:00
  • AJAX缓存的问题解决办法

    2009-04-26 14:47:00
  • Python3中str、bytes、bytearray转化

    2023-01-11 23:29:30
  • bitbucket搭建详细过程记录

    2023-08-25 23:52:31
  • ASP程序种如何调用DLL文件

    2008-01-15 19:12:00
  • 人性化设计用文字注入情感

    2007-08-22 08:59:00
  • 初衷和结果

    2009-02-23 12:52:00
  • MySQL表的重命名字段添加及字段属性修改操作语法

    2024-01-21 07:18:35
  • Python Django中的STATIC_URL 设置和使用方式

    2021-08-07 13:39:06
  • asp之家 网络编程 m.aspxhome.com