码迷,mamicode.com
首页 > 编程语言 > 详细

python并发编程之多线程

时间:2017-12-02 17:49:16      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:也会   work   设置   方法   结束   glob   多个   tpi   查看   

         线程和进程无论是使用方法还是概念方面,几乎一样,主要的区分在于概念方面的不同

线程可以认为属于进程的一部分,进程分为主进程和子进程,线程也分为主线程和子线程                                                                                              

 

 

 

                                                                                            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并发编程之多线程

标签:也会   work   设置   方法   结束   glob   多个   tpi   查看   

原文地址:http://www.cnblogs.com/ddjl/p/7954558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!