python并发编程之多线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python并发编程之多线程相关的知识,希望对你有一定的参考价值。
线程和进程无论是使用方法还是概念方面,几乎一样,主要的区分在于概念方面的不同
线程可以认为属于进程的一部分,进程分为主进程和子进程,线程也分为主线程和子线程
threading(开启线程的模块)模块介绍
multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性
from threading import Thread #开启超级线程变换状态 import time def sayhi(name): time.sleep(2) print(‘%s say hello‘ %name) if __name__ == ‘__main__‘: t=Thread(target=sayhi,args=(‘egon‘,)) t.start() print(‘主线程‘)
在一个进程下开启多个线程与在一个进程下开启多个子进程的区别
开启线程的速度远远超过开启子进程,而且在主进程下开启线程的pid都和主进程的pid一毛一样
from threading import Thread from multiprocessing import Process import os def work(): print(‘hello‘,os.getpid()) if __name__ == ‘__main__‘: #part1:在主进程下开启多个线程,每个线程都跟主进程的pid一样 t1=Thread(target=work) t2=Thread(target=work) t1.start() t2.start() print(‘主线程/主进程pid‘,os.getpid()) #part2:开多个进程,每个进程都有不同的pid p1=Process(target=work) p2=Process(target=work) p1.start() p2.start() print(‘主线程/主进程pid‘,os.getpid())
同一进程内的线程之间共享进程内的数据
from threading import Thread
from multiprocessing import Process
import os
def work():
global n
n=0
if __name__ == ‘__main__‘:
# n=100
# p=Process(target=work)
# p.start()
# p.join()
# print(‘主‘,n) #毫无疑问子进程p已经将自己的全局的n改成了0,但改的仅仅是它自己的,查看父进程的n仍然为100
n=1
t=Thread(target=work)
t.start()
t.join()
print(‘主‘,n) #查看结果为0,因为同一进程内的线程之间共享进程内的数据
#同一进程内的线程共享该进程的数据?
线程相关的其他方法
Thread实例对象的方法 # isAlive(): 返回线程是否活动的。 # getName(): 返回线程名。 # setName(): 设置线程名。 threading模块提供的一些方法: # threading.currentThread(): 返回当前的线程变量。 # threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 # threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
和进程一样,主线程也会等待子线程运行完毕之后给子线程收完尸再结束
以上是关于python并发编程之多线程的主要内容,如果未能解决你的问题,请参考以下文章