一、multiprocessing模块介绍

python中的多线程无法利用CPU资源,在python中大部分情况使用多进程。python中提供了非常好的多进程包multiprocessing。

multiprocessing模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似。

multiprocessing的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。

二、Process类的介绍

1.创建进程的类

Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)

强调:
1. 需要使用关键字的方式来指定参数
2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号

2.参数介绍

 group参数未使用,值始终为None

 target表示调用对象,即子进程要执行的任务

 args表示调用对象的位置参数元组,args=(1,2,'egon',)

 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}

 name为子进程的名称

3.方法介绍

 p.start():启动进程,并调用该子进程中的p.run()
p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法 p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,使用该方法需要特别小心这种情况。
如果p还保存了一个锁那么也将不会被释放,进而导致死锁
p.is_alive():如果p仍然运行,返回True p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,
需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程

4.属性介绍

p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置

p.name:进程的名称

p.pid:进程的pid

p.exitcode:进程在运行时为None、如果为–N,表示被信号N结束(了解即可)

p.authkey:进程的身份验证键,默认是由os.urandom()随机生成的32字符的字符串。这个键的用途是为涉及网络连接的底层进程间通信提供安全性,这类连接只有在具有相同的身份验证键时才能成功(了解即可)

三、Process类的使用

一定要把开进程的代码写在if __name__=='__main__':下面

开一个进程和主进程是并发的关系,我start一下就是先告诉操作系统我要开一个进程
,然而它不会等待,他会去执行下面的代码,完了他吧进程开始后,就开始执行了

strat():方法的功能

  1.开启进程
  2.执行功能

四、开启进程的两种方式

 from multiprocessing import Process
import time
import random
def piao(name):
print('%s is piaoing'%name)
time.sleep(random.randint(1,3))
print('%s is piao end'%name)
if __name__ =='__main__':
p1 = Process(target=piao,kwargs={'name':'alex'})
p2 = Process(target=piao,kwargs={'name':'alex'})
p3 = Process(target=piao,kwargs={'name':'alex'})
p1.start()
p2.start()
p3.start()
print('主进程')

第一种方式

 from multiprocessing import Process
import time
import random
import os
class Piao(Process):
def __init__(self,name):
super().__init__() #必须继承父类的一些属性
self.name = name
def run(self): #必须得实现一个run方法
print(os.getppid(),os.getpid())
print('%s is piaoing'%self.name)
time.sleep(random.randint(1,3))
print('%s is piao end'%self.name)
if __name__ =='__main__':
p1 = Piao('alex')
p2 = Piao('wupeiqi')
p3 = Piao('yuanhao')
p1.start()
p2.start()
p3.start()
print('主进程',os.getpid())

第二种方式

getppid()父进程id
getpid() #当前进程id

五、多进程实现套接字并发

 from socket import *
from multiprocessing import Process
s = socket(AF_INET,SOCK_STREAM)
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
s.bind(('127.0.0.1',8081))
s.listen(5)
print('start running...')
def talk(coon,addr):
while True:
try:
data = coon.recv(1024)
if not data: break
coon.send(data.upper())
except Exception:
break
coon.close() if __name__ == '__main__':
while True:
coon,addr = s.accept()
print(coon,addr)
p =Process(target=talk,args=(coon,addr))
p.start()
s.close()

服务端

 from socket import *
c = socket(AF_INET,SOCK_STREAM)
c.connect(('127.0.0.1',8081))
while True:
cmd = input('>>:').strip()
if not cmd:continue
c.send(cmd.encode('utf-8'))
data = c.recv(1024)
print(data.decode('utf-8'))
c.close()

客户端

Cpython支持的进程与线程的更多相关文章

  1. Cpython支持的进程与线程(Day33)

    一.multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. mul ...

  2. Python-Cpython解释器支持的进程与线程-Day9

    Cpython解释器支持的进程与线程 阅读目录 一 python并发编程之多进程 1.1 multiprocessing模块介绍 1.2 Process类的介绍 1.3 Process类的使用 1.4 ...

  3. Cpython解释器支持的进程与线程

    一.理论部分 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的 ...

  4. Python-Cpython解释器支持的进程与线程

    一.Python并发编程之多进程 1. multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在pyt ...

  5. python支持的进程与线程

    一.multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程.python中提供了非常好的多进程包multiprocessing. mul ...

  6. Cpython 支持的线程

    因为Python解释器帮你自动定期进行内存回收,你可以理解为python解释器里有一个独立的线程,每过一段时间它起wake up做一次全局轮询看看哪些内存数据是可以被清空的,此时你自己的程序 里的线程 ...

  7. python之进程与线程

    什么是操作系统       可能很多人都会说,我们平时装的windows7 windows10都是操作系统,没错,他们都是操作系统.还有没有其他的? 想想我们使用的手机,Google公司的Androi ...

  8. 进程,线程,GIL,Python多线程,生产者消费者模型都是什么鬼

    1. 操作系统基本知识,进程,线程 CPU是计算机的核心,承担了所有的计算任务: 操作系统是计算机的管理者,它负责任务的调度.资源的分配和管理,统领整个计算机硬件:那么操作系统是如何进行任务调度的呢? ...

  9. Python-GIL 进程池 线程池

    5.GIL vs 互斥锁(*****) 1.什么是GIL(Global Interpreter Lock) GIL是全局解释器锁,是加到解释器身上的,保护的就是解释器级别的数据 (比如垃圾回收的数据) ...

随机推荐

  1. Windows下开启composer镜像服务来安装yii

    网上关于使用composer的安装教程挺多的,但是作为新手的我,觉得好凌乱,不断尝试后,终于安装好了.最后总结出,用开启composer的镜像服务来安装yii是最好的啦,当然,归档文件的做法有利有弊就 ...

  2. java伪代码 大道至简第一章

    import.java.大道至简.*; //一·编程的精义 import.java.编程的精义.*; public class BIANCHENGDEJINGYI { if(愚公死了) 愚公的儿子,孙 ...

  3. 将web项目导入到eclipse中常见错误

     将web项目导入到eclipse中常见错误  错误1:string cannot be resolved to a type  原因:这种情况一般是因为你的JDK版本没有设置好,或者设置的有不一致的 ...

  4. Jquery简单应用-1.8.3

    Jquery属于什么? javascript的一个库 一个.js文件 用什么用? 可以提高javascript的编程效率 使用流程 用一个html<script type='text/javas ...

  5. 自制rpm包

    参考自:https://blog.csdn.net/u010384744/article/details/80929319 https://blog.csdn.net/samxx8/article/d ...

  6. Ubuntu16.04安装最新版nodejs

    原文链接:https://www.jianshu.com/p/2b24cd430a7d

  7. 20165231 2017-2018-2 《Java程序设计》第7周学习总结

    教材学习内容总结 第十一章 MySQL数据库管理系统,简称MySQL,是世界上最流行的开源数据库管理系统,其社区版(MySQL Community Edition)是最流行的免费下载的开源数据库管理系 ...

  8. 出现警告“user1 不在 sudoers 文件中。此事将被报告。”

    linux中不是每个用户都有sudo权限. 在/etc/下有个文件sudoers 由此文件可知只有用户为sudo这个组的成员之后才能执行sudo命令 此时,我们查看用户user1的属性: 由此看出us ...

  9. ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

    背景 老生常谈,为sql当时着迷了,啥都用sql解决.看这个语句,麻烦的. ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row ...

  10. Android apk动态加载机制

    参考链接:http://blog.csdn.net/singwhatiwanna/article/details/22597587