036线程进程(重要)
2018-06-18 01:42:49来源:未知 阅读 ()
相比Java,python简单很多,一个例子就可以理解
###########################
有两种创建线程的方式,第一种是直接建立线程,把方法放进去,这是第一种:
创建线程对象,参数设置要执行的方法以及方法的参数,然后执行start()方法,如下:
1 import threading 2 import time 3 4 def foo(n): 5 print('foo%s'%n) 6 time.sleep(1) 7 print('foo end') 8 9 def bar(n): 10 print('bar%s'%n) 11 time.sleep(2) 12 print('bar end') 13 14 begin = time.time() 15 16 t1 = threading.Thread(target=foo,args=(1,)) # 创建线程对象,target是某个方法的地址,args是实参 17 t2 = threading.Thread(target=bar,args=(2,)) 18 19 t1.start() # 开启线程对象 20 t2.start() 21 print('main') 22 23 end = time.time() 24 print(end - begin)
运行结果:
GIL:cpython解释器只能使用一个cpu,cpython里面会自动加个大锁,就是python不能够使用多核,不能发挥多核的作用
改进方案就是使用多进程,/笑哭,或者运用到多计算和多I/O的,使用c语言
开子进程是复制父进程的资源,十分消耗资源,所以难搞
################
t.join()方法,可以阻塞住进程,一定要等t这个线程对象的线程运行完成才能继续执行后面的代码
##############################################
##守护线程Damen
t.setDaemon(True)设置成True后,主线程结束它就会结束
#####
threading.current_thread() # 拿到这个执行线程的名字
threading.active_count() # 活跃的线程
##############
第二种创建线程的方式:继承线程类,覆盖run方法,然后创建对象,执行start()方法,就可以执行这个线程了,该线程执行的代码就是run里面的代码
import threading import time class MyThread(threading.Thread): def __init__(self,num): threading.Thread.__init__(self) # 注意这个构造方法 self.num = num def run(self):#定义每个线程要运行的函数 print('runningonnumber:%s'%self.num) time.sleep(3) if __name__ == '__main__': t1 = MyThread(1) t2 = MyThread(2) t1.start() t2.start()
两个另外的例子:
# 01 要多线程执行的方法作为参数创建线程
import threading import time class Person_thread: def __init__(self,name): self.pname = name def show(self): for i in range(100): print(self.pname,'*******',threading.current_thread(),'--------',i) time.sleep(0.00001) if __name__ == '__main__': p1 = Person_thread('xxx') p2 = Person_thread('qqq') t1 = threading.Thread(target=p1.show) t2 = threading.Thread(target=p2.show) t1.start() t2.start()
# 02 继承threading.Thread类
import threading import time class Person_thread(threading.Thread): def __init__(self,name): threading.Thread.__init__(self) self.pname = name def show(self): for i in range(100): print(self.pname,'*******',self.name,'--------',i) time.sleep(0.00001) def run(self): self.show() if __name__ == '__main__': p1 = Person_thread('xxx') p2 = Person_thread('qqq') p1.start() p2.start()
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Python连载30-多线程之进程&线程&线程使用 2019-08-13
- python多线程同步实例分析 2019-08-13
- xpath+多进程爬取八零电子书百合之恋分类下所有小说。 2019-08-13
- xpath+多进程爬取全书网纯爱耽美类别的所有小说。 2019-08-13
- 进程相关 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash