当前位置: 首页 > 图灵资讯 > 行业资讯> Python之线程与进程相关介绍

Python之线程与进程相关介绍

发布时间:2025-10-12 17:49:56

Python 线程与进程

线程是操作系统能够进行操作调度的最小单位。它包含在过程中,是过程中的实际操作单位。一个线程是指过程中一个单一顺序的控制流,一个过程中可以并发多个线程,每个线程可以并行执行不同的任务。

使用 threading 模块

方法一:

importthreading
importtime
deffoo(n):
print('foo%s'%n)
time.sleep(1)
print('endfoo')
defbar(n):
print('bar%s'%n)
time.sleep(2)
print('endbar')
t1=threading.Thread(target=foo,args=(1,))
t2=threading.Thread(target=bar,args=(2,))
t1.start()
t2.start()
print('...inthemain...')

运行结果:

foo1
bar2
...inthemain...
endfoo
endbar

方法二:

importtime,threading
classMyThread(threading.Thread):
def__init__(self,num):
threading.Thread.__init__(self)
self.num=num
defrun(self):#定义线程运行的函数
print("runningonnumber:%s"%self.num)
time.sleep(3)
if__name__='__main__':
t1=MyThread(1)
t2=MyThread(2)
t1.start()
t2.start()

运行结果:

runningonnumber:1
runningonnumber:2

join 方法使主线程等待子线程完成后才能继续

importthreading
importtime
begin=time.time()
deffoo(n):
print('foo%s'%n)
time.sleep(1)
print('endfoo')
defbar(n):
print('bar%s'%n)
time.sleep(2)
print('endbar')
t1=threading.Thread(target=foo,args=(1,))
t2=threading.Thread(target=bar,args=(2,))
t1.start()
t2.start()
t1.join()
t2.join()
print('...inthemain...')

运行结果:

foo1
bar2
endfoo
endbar
...inthemain...

相关推荐:Python视频教程

串行和多线程在计算密集型任务中进行比较

importthreading,time
begin=time.time()
defadd(n):
sum=0
foriinrange(n):
sum+=i
print(sum)
add(100000000)
add(200000000)
end=time.time()
print(end-begin)

运行结果:

4999999950000000
19999999900000000
17.66856598854065
importthreading,time
begin=time.time()
defadd(n):
sum=0
foriinrange(n):
sum+=i
print(sum)
t1=threading.Thread(target=add,args=(100000000,))
t1.start()
t2=threading.Thread(target=add,args=(200000000,))
t2.start()
t1.join()
t2.join()
end=time.time()
print(end-begin)

运行结果:

4999999950000000
19999999900000000
21.088160276412964
#结果是串行运行比多线程运行更快

Cpython 中有 GIL (Global Interpreter Lock,全球解释器锁),所以在同一时间,只有一个线程可以进入调度。如果任务是IO密集型,则可以使用多线程;如果任务是计算密集型的,最好的方法是将其改为 C。

setDaemon()

只要主线程完成,无论子线程是否完成,调用此方法都应与主线程一起退出。

threading.currentThread()

返回当前的线程变量。

threading.active_count()

返回正在运行的线程数量。

importthreading,time
fromtimeimportctime,sleep
defmusic(func):
print(threading.current_thread())
foriinrange(2):
print("Beginlisteningto%s.%s"%(func,ctime()))
sleep(2)
print("endlistening%s"%ctime())
defmovie(func):
print(threading.current_thread())
foriinrange(2):
print("Beginwatchingatthe%s%s"%{func,ctime()})
sleep(4)
print("endwatching%s"%ctime())
threads=[]
t1=threading.Thread(target=music,args=('klvchen',))
threads.append(t1)
t2=threading.Thread(target=movie,args=('lili',))
threads.append(t2)
if__name__='__main__':
fortinthreads:
t.setDaemon(True)
t.start()
print(threading.current_thread())
print(threading.active_count())
print("allover%s"%ctime())

运行结果:

<Thread(Thread-1.startedaemon5856)>
Beginlisteningtoklvchen.WedJul1123:43:512018
<Thread(Thread-2.starteddaemon9124)>
<_MainThread(MainThread,started9444)>
3
allloverwedJul123:43:512018

相关文章

Python之线程与进程相关介绍

Python之线程与进程相关介绍

2025-10-12
Python实现自定义函数的5种常见形式分析

Python实现自定义函数的5种常见形式分析

2025-10-12
Python之简单的网络编程

Python之简单的网络编程

2025-10-12
python集合是否可变总结

python集合是否可变总结

2025-10-10
一文读懂Python中的映射

一文读懂Python中的映射

2025-10-10
python中的josn方法相关介绍

python中的josn方法相关介绍

2025-10-10