Python 线程,python的线程和进程
Python 线程与进程
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
使用 threading 模块
方法一:
导入线程
进口时间
deffoo(n):
打印( foo%s%n )
时间。睡眠(1)
打印(“endfoo”)
defbar(n):
打印(条形% s“% n”)
时间。睡眠(2)
打印("结束条")
t1=线程。线程(target=foo,args=(1,))
t2=线程。线程(target=bar,args=(2,))
t1.start()
t2.start()
打印(."在曼哈顿.")运行结果:
foo1
bar2
.因瑟梅因..
恩德福
端杆方法二:
导入时间,线程
classMyThread(线程。螺纹):
def__init__(self,num):
threading.Thread.__init__(self)
自我编号=数字
defrun(self):#定义线程要运行的函数
打印( runningonnumber: % s % self.num )
时间。睡眠(3)
if__name__==__main__:
t1=MyThread(1)
t2=MyThread(2)
t1.start()
t2.start()运行结果:
运行号码:1
runningonnumber:2join方法使得主线程等待子线程完成才继续
导入线程
进口时间
begin=time.time()
deffoo(n):
打印( foo%s%n )
时间。睡眠(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相关推荐:《Python视频教程》bar2
endfoo
endbar
........inthemain..........
在计算密集型任务中串行与多线程进行对比
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)
499999995000000019999999900000000
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)
4999999950000000Cpython 中有 GIL (Global Interpreter Lock,全局解释器锁),所以在同一时刻,只能有一个线程进入调度。如果任务是IO密集型的,可以使用多线程;如果任务是计算密集型的,最优方法是改成 C。19999999900000000
21.088160276412964
#结果为串行运行比多线程运行更快
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,starteddaemon5856)>Beginlisteningtoklvchen.WedJul1123:43:512018
<Thread(Thread-2,starteddaemon9124)>
<_MainThread(MainThread,started9444)>
3
alloverWedJul1123:43:512018
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。