博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程 - 线程 - 1.开启线程的两种方式/2.进程与线程的区别/3.Thread对象的其他属性或方法/4.守护线程...
阅读量:5129 次
发布时间:2019-06-13

本文共 4606 字,大约阅读时间需要 15 分钟。

1.开启线程的两种方式:   进程,线程:       进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合)而线程才是cpu上的执行单位)       1.同一个进程内的多个线程共享该进程内的地址资源       2.创建线程的开销远小于创建进程的开销(创建一个进程,就是创建一个车间,涉及到申请空间,         而且在该空间内建至少一条流水线,但创建线程,就只是在一个车间内造一条流水线,无需申请空间,所以创建开销小)
1 # 方式1: 2 from threading import Thread 3 import time 4  5 def sayhi(name): 6     time.sleep(2) 7     print('%s say hello'%name) 8  9 if __name__ == "__main__":10     t=Thread(target=sayhi,args=('alice',))11     t.start()12     print('主线程')  # 一个进程,一个主线程,开启了一个线程13 14 # 方式2:15 from threading import Thread16 import time17 18 class Sayhi(Thread):19     def __init__(self,name):20         super().__init__()21         self.name = name22 23     def run(self):24         time.sleep(2)25         print('%s say hello'%self.name)26 27 if __name__ == "__main__":28     t = Sayhi('alice')29     t.start()30     print('主线程')
2.进程与线程的区别:   1.开进程的开销远大于开线程   2.同一进程内的多个线程共享该进程的地址空间   3.瞅一眼pid
1 # 1. 2 import time 3 from threading import Thread 4 from multiprocessing import Process 5  6 def piao(name): 7     print('%s piaoing' %name) 8     time.sleep(2) 9     print('%s piao end' %name)10 11 if __name__ == '__main__':12     # p1=Process(target=piao,args=('egon',))13     # p1.start() # 发出去后,没有立刻反应 开进程开销大14 15     t1=Thread(target=piao,args=('egon',))16     t1.start()  # 发出去后,立刻就反应了,开线程开销小17 18     print('主线程')19 """20 主线程21 egon piaoing22 egon piao end23 """24 """25 egon piaoing26 主线程27 egon piao end28 """29 # 2.30 from threading import Thread31 from multiprocessing import Process32 33 n=10034 def task():35     global n36     n=037 38 if __name__ == '__main__':39     # p1=Process(target=task)40     # p1.start()41     # p1.join() # 彼此隔离的 n = 10042 43     t1=Thread(target=task)44     t1.start()45     t1.join()  # 共享地址空间 n = 046 47     print('主线程',n)48 """49 主线程 100 50 """51 """52 主线程 0 53 """54 # 3.55 from threading import Thread56 from multiprocessing import Process,current_process57 import os58 59 def task():60    print(current_process().pid)61    print(os.getpid(),os.getppid())62 63 if __name__ == '__main__':64     # p1=Process(target=task)65     # p1.start()  # pid 不一样66     # p1.join()67 68     t1=Thread(target=task)69     t1.start()  # 线程pid 一样70     t1.join()71 72     print('主线程',current_process().pid)73     print('主线程',os.getpid(),os.getppid())74 """75 3878076 38780 4316877 主线程 4316878 主线程 43168 1248079 """80 """81 5891282 58912 1248083 主线程 5891284 主线程 58912 1248085 """
3.Thread对象的其他属性或方法:   currentThread().getName()   t.setName()   t.is_alive()   t.isAlive()   t.join()   active_count()   enumerate()
1 from threading import Thread,currentThread,active_count,enumerate 2 import time 3  4 def task(): 5     print('%s is running'%currentThread().getName()) 6     time.sleep(2) 7     print('%s is done'%currentThread().getName()) 8  9 if __name__ == "__main__":10     t = Thread(target=task,name='子线程1')11     t.start()12     # t.join()13     # print(t.getName())14     # t.setName('儿子线程1')15     # currentThread().setName('主进程')16     # print(t.is_alive())17     # print(t.isAlive())18     # print('主线程:',currentThread().getName())19     t.join()20     # print(active_count())  # 2 没有join 1 有join21     print(enumerate())  # [<_MainThread(MainThread, started 41144)>]22 23 24 """25 Thread-1 is running26 Thread-127 主线程 MainThread28 Thread-1 is done29 """30 """31 子线程1 is running32 子线程133 主线程 MainThread34 子线程1 is done35 """36 """37 子线程1 is running38 主线程 MainThread39 儿子线程1 is done40 """41 """42 子线程1 is running43 主线程: 主进程44 子线程1 is done45 """46 """47 子线程1 is running48 子线程1 is done49 False50 False51 主线程: MainThread52 """
4.守护线程:   一个进程什么时候被销毁,     1.不开线程,代码完毕,该进程就被销毁     2.主线程等到所有子线程死了后,他才死         守护线程等到所有的子线程死了后,他才死
1 from threading import Thread 2 import time 3  4 def sayhi(name): 5     time.sleep(2) 6     print('%s say hello' %name) 7  8 if __name__ == '__main__': 9     t=Thread(target=sayhi,args=('egon',))10     # t.setDaemon(True) #必须在t.start()之前设置11     t.daemon=True12     t.start()13 14     print('主线程')15     print(t.is_alive())  # t 跟着死了 一个线程内没有开启非守护线程16 """17 主线程18 True19 """20 21 from threading import Thread22 import time23 24 def foo():25     print(123)26     time.sleep(4)27     print("end123")28 29 def bar():30     print(456)31     time.sleep(3)32     print("end456")33 34 if __name__ == '__main__':35     t1=Thread(target=foo)36     t2=Thread(target=bar)37 38     t1.daemon=True39     t1.start()40     t2.start()41     print("main-------")42 """43 123    foo time.sleep(1)44 45645 main-------46 end12347 end45648 """49 """50 123     foo time.sleep(4)51 45652 main-------53 end45654 """

 

转载于:https://www.cnblogs.com/alice-bj/p/8708062.html

你可能感兴趣的文章
RabbitMQ的安装
查看>>
Halcon匹配方法
查看>>
Linux安装libcholmod-dev找不到的解决方法
查看>>
cuda基础
查看>>
吉林大学考研复试题目(牛客网)
查看>>
最长公共子序列与最长公共字串
查看>>
动态规划之工作方案
查看>>
React的三大属性
查看>>
redux
查看>>
virutalenv一次行安装多个requirements里的文件
查看>>
如何让字典保持有序---Python数据结构与算法相关问题与解决技巧
查看>>
django-xadmin设置全局变量
查看>>
Vue安装准备工作
查看>>
.NET 母版页 讲解
查看>>
Android Bitmap 和 Canvas详解
查看>>
最大权闭合子图
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
导入导出数据库和导入导出数据库表
查看>>
linux下操作mysql
查看>>