gpt4 book ai didi

python threading模块的使用指南

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python threading模块的使用指南由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1. threding模块创建线程对象

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

?
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
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中,默认情况下,主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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接受关键字参数。如下所示:

?
1
2
3
4
5
6
7
8
9
10
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. 线程产生的资源竞争

首先我们来看一个案例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

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

原文链接:https://www.cnblogs.com/qshhl/p/14844989.html 。

最后此篇关于python threading模块的使用指南的文章就讲到这里了,如果你想了解更多关于python threading模块的使用指南的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com