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并发编程之多线程的主要内容,如果未能解决你的问题,请参考以下文章

python并发编程之多线程

python并发编程之多线程基础知识点

Python并发编程之多线程

python并发编程之多线程编程

python并发编程之多线程守护系列互斥锁生产者消费者模型

python并发编程之多线程