博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-多线程-25
阅读量:5160 次
发布时间:2019-06-13

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

#多进程与多线程

-进程:程序运行的一个状态
  -包含地址空间/内存/数据栈等
  -每个进程有自己独立运行的空间,但数据共享是一个问题
-线程
  -一个进程的独立运行片段,一个进程可以有多个线程
  -轻量化的进程
  -一个进程的多个线程间可以共享数据和上下文运行环境
  -互斥问题
-全局解锁器(GIL)
  -python代码的执行是由python虚拟机进行控制
  -规定只能由一个控制线程在执行
-python包
  -thread:有问题,不好用,python3改成了_thread
  -threading:通用的包,现在主流在用
  -以下案例总结
    -案例01:使用多线程,可以缩短程序执行时间,使用_thread
    -案例02:多线程,传参数

-案例01#利用time函数,生成两个函数,顺序调用,计算总的运行时间import timeimport _thread as threaddef loop1():    #ctime得到当前时间    print("Start loop 1 at:",time.ctime())    #睡眠时间    time.sleep(4)    print("End loop 1 at:",time.ctime())    def loop2():    #ctime得到当前时间    print("Start loop 2 at:",time.ctime())    #睡眠时间    time.sleep(2)    print("End loop 2 at:",time.ctime())    def main():    print("Start at:",time.ctime())    #启用多线程去执行两个函数    #写法为start_new_thread    #后面的括号必须有,用于放参数    thread.start_new_thread(loop1,())    thread.start_new_thread(loop2,())    print("End at:",time.ctime())    if __name__ == "__main__"    main()    while True:        time.sleep(10)    #此处循环,是为了在上述两个线程完成之前,主线程要等待,不然主线程会直接继续工作,其他两个线程没有主线程运行的快,无法输出结果。

 

-案例02import timeimport _thread as threaddef loop1(in1):    #ctime得到当前时间    print("Start loop 1 at:",time.ctime())    print("我是笨蛋",in1)    #睡眠时间    time.sleep(4)    print("End loop 1 at:",time.ctime())    def loop2(in1,in2):    #ctime得到当前时间    print("Start loop 2 at:",time.ctime())    print("我是笨蛋",in1,"和傻瓜",in2)    #睡眠时间    time.sleep(2)    print("End loop 2 at:",time.ctime())def main():    print("Start at:",time.ctime())    #启用多线程去执行两个函数    #写法为start_new_thread    #后面的括号必须有,用于放参数    thread.start_new_thread(loop1,("pangqi"))    thread.start_new_thread(loop2,("pangqi","benqi"))    print("End at:",time.ctime())    if __name__ == "__main__"    main()    while True:        time.sleep(10)

 

-threading的使用

-直接利用threading.Thread生成Thread实例
1 t = threading.Thread(target=xxx,args=(xx,))
2 t.start(): 启动多线程
3 t.join():等待多线程执行完成
以下案例03

-案例03    import timeimport threadingdef loop1(in1):    #ctime得到当前时间    print("Start loop 1 at:",time.ctime())    print("我是笨蛋",in1)    #睡眠时间    time.sleep(4)    print("End loop 1 at:",time.ctime())    def loop2(in1,in2):    #ctime得到当前时间    print("Start loop 2 at:",time.ctime())    print("我是笨蛋",in1,"和傻瓜",in2)    #睡眠时间    time.sleep(2)    print("End loop 2 at:",time.ctime())    def main():    print("Start at:",time.ctime())    #启用多线程去执行两个函数    #生成threading.Thread实例    t1 = threading.Thread(target=loop1,args=("pangqi",))    t1.start()    t2 = threading.Thread(target=loop2,args=("pangqi","benqi",))    t2.start()    #直到t1 和 t2 都执行完成,才会往下执行    t1.join()    t2.join()    print("End at:",time.ctime())        if __name__ == "__main__"    main()    while True:        time.sleep(10)

 

#守护线程 daemon

-如果在程序中将子线程设置成守护线程,则子线程会在主线程结束的同时自动退出
-一般认为,守护线程不是特别重要,或不允许离开主线程独自运行
-守护线程案例能否有效果跟环境相关(可能出现“说好一起到白头,你却偷偷焗了油”的现象)

-案例04import timeimport threadingdef fun():    print("Start fun")    time.sleep(2)    print("End fun")print("Main thread")t1 = threading.Thread(target=fun,args=())t1.setDaemon(True)t1.start()time.sleep(1)print("Main thread end")    #线程常用属性    -threading.currentThread:返回当前线程变量    -threading.enumerate:返回一个包含正在运行的线程的list    -threading.activeCount:返回正在运行的线程数量    -thr.setName:给线程设置名字    -thr.getName:得到线程的名字

 

posted on
2018-09-12 20:53 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/houziaipangqi/p/9637293.html

你可能感兴趣的文章
Ruby 数式匹配器
查看>>
Spring事物
查看>>
element ui的table的头部自定义
查看>>
排序之希尔排序
查看>>
lintcode-11-二叉查找树中搜索区间
查看>>
各种算法总结一
查看>>
153. Find Minimum in Rotated Sorted Array
查看>>
650. 2 Keys Keyboard
查看>>
HTML5新增属性
查看>>
CSS3动画--过渡效果
查看>>
解决因生成javadoc失败导致Maven打包失败问题
查看>>
js--延时消失的菜单--(笔记)
查看>>
JAVA,自定義MySQL的工具類
查看>>
原生js和jquery实现图片轮播特效
查看>>
记录点滴2
查看>>
php.ini配置中文详解
查看>>
27.solr集群
查看>>
(67)windows安装zabbix监控
查看>>
Play中JSON序列化
查看>>
css absolute同时设置top bottom
查看>>