python—day30

补充:守护进程

守护进程例子:

  

from multiprocessing import  Process

import time

def foo():
    print(123)
    time.sleep(1)
    print(‘end123‘)

def bar():
    print(456)
    time.sleep(3)
    print(‘end456‘)

if __name__ == ‘__main__‘:
    p1 = Process(target=foo)
    p2 = Process(target=bar)
    p2.daemon = True
    p1.start()

    p2.start()

    print(‘====>‘)

守护进程应用:

 1 import time
 2 import random
 3 from multiprocessing import Process,JoinableQueue
 4
 5 def consumer(name,q):
 6     while True:
 7         res = q.get()
 8         time.sleep(random.randint(1,3))
 9         print(‘%s 吃了%s‘ %(name,res))
10         q.task_done()
11
12 def producer(name,q,food):
13     for i in range(5):
14         time.sleep(random.randint(1,3))
15         res = ‘%s%s‘ %(i,food)
16         q.put(res)
17         print(‘%s生产了%s‘ %(name,res))
18
19 if __name__ == ‘__main__‘:
20     q = JoinableQueue()
21
22     p1 = Process(target=producer,args=(‘kermit1‘,q,‘bianbian1‘))
23     p2 = Process(target=producer,args=(‘kermit2‘,q,‘bianbian2‘))
24     p3 = Process(target=producer,args=(‘kermit3‘,q,‘bianbian3‘))
25
26     c1 = Process(target=consumer,args=(‘田秩玮1‘,q))
27     c2 = Process(target=consumer,args=(‘田秩玮2‘,q))
28
29     c1.daemon = True
30     c2.daemon = True
31
32     p1.start()
33     p2.start()
34     p3.start()
35     c1.start()
36     c2.start()
37
38
39     p1.join()
40     p2.join()
41     p3.join()
42
43     q.join() #一旦结束就意味着消费者取完东西了
44
45     print(‘主进程结束‘)

线程:

1、什么是线程?

  线程指的是一条流水线的工作过程;

  进程根本就不是一个执行单位,进程其实是一个资源单位;

  一个进程自带一个线程,线程才是执行单位;

2、线程 VS 进程

  1、同一线程内的线程们共享该进程内的资源,不同进程内的线程资源肯定是隔离的;

  2、创建线程的开销比进程要小的多;

开启线程的两种方式:

方式一:

 1 from threading import Thread
 2 import  time
 3 def task(name):
 4     print(‘%s‘ %name)
 5     time.sleep(1)
 6
 7 if __name__ == ‘__main__‘:
 8     t = Thread(target=task,args=(‘kermit‘,))
 9     t.start()
10     print(‘===主线程‘)

方式二:推荐用自己继承的Thread,self.name 会自带名字

1 class MyThread(Thread):
2     def run(self):
3         print(‘%s is running...‘ %self.name)
4         time.sleep(1)
5
6 if __name__ == ‘__main__‘:
7     t = MyThread()
8     t.start()
9     print(‘主线程...‘)

 进程 VS 线程:

 1 from threading import Thread
 2 import time,os
 3
 4 def task():
 5     print(‘%s is running ‘ %os.getpid())
 6     time.sleep(1)
 7 if __name__ == ‘__main__‘:
 8     t = Thread(target=task,)
 9     t2 = Thread(target=task,)
10     t.start()
11     t2.start()
12     print(‘===>主线程:%s‘ %os.getpid())

2、线程创建开销小

3、同一进程的多个线程共享该进程内的资源

 1 from threading import Thread
 2 import time,os
 3
 4 x = 1000
 5 def task():
 6     global x
 7     x= 0
 8
 9 if __name__ == ‘__main__‘:
10     t = Thread(target=task,)
11     t.start()
12     t.join()
13     print(‘主线程‘,x)

线程的其他方法:current_thread,active_count,enumerate

 1 from threading import Thread,active_count,current_thread,enumerate
 2
 3 import time
 4
 5 def task():
 6     print(‘%s is running‘ %current_thread().name) #查看选择的线程名字
 7     time.sleep(1)
 8
 9 if __name__ == ‘__main__‘:
10     t1 = Thread(target=task,name=‘第一个线程!‘)
11     t2 = Thread(target=task)
12     t3 = Thread(target=task)
13     t1.start()
14     t2.start()
15     t3.start()
16     print(t1.is_alive())
17     print(active_count()) #查看线程数量
18     print(enumerate()) #把线程信息弄成一个列表
19     print(‘主线程%s‘ %current_thread().name)

 

守护线程:

原文地址:https://www.cnblogs.com/kermitjam/p/8954487.html

时间: 2024-11-07 21:36:46

python—day30的相关文章

网络编程与模块相关

BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层模型 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 每层运行常见物理设备 详细参考: http://www.cnblogs.com/linhaifeng/articles/5937962.html#_label4 学习socket一定要先学习互联网协议: 1.首先:本节课程的目标就是教会你如何

python 全栈开发,Day30(第一次面向对象考试)

月考题: python 全栈11期月考题 一 基础知识:(70分) 1.文件操作有哪些模式?请简述各模式的作用(2分) 2.详细说明tuple.list.dict的用法,以及它们的特点(3分) 3.解释生成器(generator)与函数的不同,并实现且使用简单generator(3分) 4.如何理解lambda函数/表达式(2分) 5.a=10 b=20 def test(a,b): print(a,b) c = test(b,a) print(c) 上述代码中,打印出来的值a,b,c分别是什么

python 作业

Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与寄存器,内核态与用户态及如何切换 存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池 磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU 磁带 设备驱动与控制器 总线与南桥和北桥 操作系统的启动流程 应用程序的启动流程 day02 作业要求一:整理操作系统博客 为何

Python基础31_multiprocess模块.锁.队列

一. multiprocess模块 仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块.由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享.重点强调:进程没有任何共享状态,进程修改的数据,改动仅限于该进程内,但是通过一些特殊的方法,可以实现进程之间数据的共享. 1. Process

Python学习1-Python和Pycharm的下载与安装

本文主要介绍Python的下载安装和Python编辑器Pycharm的下载与安装. 一.Python的下载与安装 1.下载 到Python官网上下载Python的安装文件,进入网站后显示如下图: 网速访问慢的话可直接在这里下载:python-2.7.11.amd64 在Downloads中有对应的支持的平台,这里我们是在Windows平台下运行,所以点击Windows,出现如下: 在这里显示了Python更新的所有版本,其中最上面两行分别是Python2.X和Python3.X对应的最后更新版本

Python——深入理解urllib、urllib2及requests(requests不建议使用?)

深入理解urllib.urllib2及requests            python Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议[1] .Python语法简洁而清晰,具有丰富和强大的类库. urllib and urllib2 区别 urllib和urllib2模块都做与请求URL相关的操作,但

python学习_day26_面向对象之封装

1.私有属性 (1)动态属性 在python中用双下划线开头的方式将属性隐藏起来.类中所有双下划线开头的名称,如__x都会自动变形成:_类名__x的形式.这种自动变形的特点是: a.类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果.b.这种变形其实正是针对外部的变形,在外部是无法通过__x这个名字访问到的.c.在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆

python面向对象知识点疏理

面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写. 实例变量:定义在方法中的变量,只作用于当前实例的类. 继承:即一个派生类(de

python实现网页登录时的rsa加密流程

对某些网站的登录包进行抓包时发现,客户端对用户名进行了加密,然后传给服务器进行校验. 使用chrome调试功能断点调试,发现网站用javascript对用户名做了rsa加密. 为了实现网站的自动登录,需要模拟这个加密过程. 网上搜了下关于rsa加密的最简明的解释: rsa加密是非对称加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥.公钥是可发布的供任何人使用,私钥则为自己