Python学习---进程 1225
进程创建
进程创建:
第一种:直接创建
第二种;利用类来实现
第一种:直接创建
from multiprocessing import Process
import time
def f(name):
time.sleep(2)
print('hello', name, time.ctime())
if __name__ == '__main__':
li = []
for i in range(13): # 文件内有4个进程,同时并发工作:主进程 + 3个进程
p = Process(target=f, args=('world',)) # 创建进程对象
li.append(p)
p.start()
for i in li:
i.join()
print('end')

第二种;利用类来实现
import time
from multiprocessing import Process
class MyProcess(Process):
# def __init__(self, name): 默认有名字
def __init__(self):
super(MyProcess, self).__init__()
# self.name = name
def run(self):
time.sleep(1)
print('hello', self.name, time.ctime()) # 进程自己有name,所以可以不用设定
if __name__ == '__main__':
li = []
for i in range(3):
# p = MyProcess(str(i))
p = MyProcess() # 进程默认有名字
p.start()
li.append(p)
for i in li:
i.join()
print("end")

父子进程:
父子进程:
from multiprocessing import Process
import os
import time
def info(title):
print(title)
print('module name:', __name__)
print('parent process:', os.getppid())
print('process id:', os.getpid()) def f(name):
info('\033[31;1mfunction f\033[0m')
print('hello', name) if __name__ == '__main__': # Win7下必须添加这个,否则会报错
info('\033[32;1mmain process line\033[0m')
time.sleep(10)
p = Process(target=info, args=('\033[32;1mson process\033[0m',))
p.start()
p.join()

进程通信
进程通信:
1 Pipes
2 Queues
Pipes:实现通信: 将父进程作为参数传递个子进程,子进程通过send发送消息给父进程
from multiprocessing import Process, Pipe
def f(conn):
conn.send([12, 34, 56])
# conn.send([12, 34, 56])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe() # 类似Socket,返回主进程,子进程的通行管道
p = Process(target=f, args=(child_conn, ))
p.start()
p2 = Process(target=f, args=(child_conn, ))
p2.start()
print(parent_conn.recv()) # 主进程接收的信息
print(parent_conn.recv()) # 发送了2个所以接收2个
p.join()

Queues:实现通信: 子进程复制了父进程。父进程将Queue对象pickle序列化后交个子进程反pickle
from multiprocessing import Process, Queue
import time
def f(q, name):
q.put([50, name, 'world'])
print('Func Q:', id(q))
if __name__ == '__main__':
li = []
q = Queue()
q.put([12, 'heh', 'world'])
print('Main Q:', id(q))
for i in range(3): # 文件内有4个进程,同时并发工作:主进程 + 3个进程
p = Process(target=f, args=(q, i)) # 创建进程对象,同时子进程操作父进程的队列
li.append(p)
p.start()
print(q.get()) # 父进程来获取子进程传递的
print(q.get()) # 子进程复制了父进程。父进程将Queue对象pickle序列化后交个子进程反pickle
print(q.get())
print(q.get())
for i in li:
i.join()
print('end')

进程数据共享
Manager
from multiprocessing import Process, Manager def f(d, l,n):
d[n] = '1'
d['2'] = 2
d[0.25] = None
l.append(n)
# print(l)
if __name__ == '__main__':
with Manager() as manager:
d = manager.dict()
l = manager.list(range(5))
p_list = []
for i in range(10):
p = Process(target=f, args=(d, l,i))
p.start()
p_list.append(p)
for res in p_list:
res.join()
print(d)
print(l)
进程池
进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。
进程池中有两个方法:
1、 apply
2、 apply_async
from multiprocessing import Process, Pool
import time
def Foo(i):
time.sleep(2)
return i + 100
def Bar(arg):
print('-->exec done:', arg)
pool = Pool(5)
for i in range(10):
pool.apply_async(func=Foo, args=(i,), callback=Bar)
# pool.apply(func=Foo, args=(i,))
print('end')
pool.close()
pool.join()
【更多参考】http://www.cnblogs.com/yuanchenqi/articles/5745958.html
【更多参考】https://www.cnblogs.com/alex3714/articles/5230609.html
Python学习---进程 1225的更多相关文章
- Python学习进程
1周第1天 主要是变量的学习(11月8日) 1.1 python安装(win和linux下)1.2 ipython安装及使用1.3 变量的定义1.4 变量赋值1.5 运算符(赋值.算术.关系.逻辑)1 ...
- Python学习进程(13)文件与IO
本节介绍基本的IO函数和文件的读写操作. (1)读取键盘输入: Python用于读取键盘输入的函数有两个:raw_input与input. 1)raw_input函数 从标准输入读取一 ...
- Python学习进程(12)模块
模块让你能够有逻辑地组织你的Python代码段. (1)python模块: 模块化的好处: 1.把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 2.模块也是Python对象, ...
- Python学习进程(3)Python基本数据类型
本节介绍在Python语法中不同的变量数据类型. (1)基本数据类型: >>> a=10; >>> b=10.0; >>> c=T ...
- Python学习进程(2)Python环境的搭建
本节主要介绍在windows和Linux平台上如何搭建Python编程环境. (1)查看Python版本: windows: C:\Users\JMSun>python 'pyt ...
- Python学习进程(1)Python简介
Python是一种结合了"解释性"."编译性"."互动性"和"面向对象"的脚本语言. (1)官方介绍: Pyth ...
- Python学习进程(15)常用内置函数
本节介绍Python的一些常用的内置函数. (1)cmp(x, y): cmp()函数比较 x 和 y 两个对象,并根据比较结果返回一个整数,如果 x<y,则返回-1:如果x&g ...
- Python学习进程(14)异常处理
本节介绍Python进行异常处理的方式,异常处理机制可以帮助我们调试python程序. (1)异常的简介: 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行 ...
- Python学习进程(11)日期和时间
本节介绍Python应用程序处理时间和日期的方式.其中转换日期格式是最常用的功能. (1)获取时间戳: Python 提供了一个 time 和 calendar 模块可以用于格式化日期 ...
随机推荐
- javascrpit sort()数组对象中排序
/*ionic 调用 * @param attr 排序的属性 如number属性 * @param rev true表示升序排列,false降序排序 * */ commonSortMethod(att ...
- app接口,如何保证是由app内部调用而非外部模拟post请求调用。
在爬虫快手主播信息的时候,发现只要我改动一下参数,比如第一页 page=1的时候,需要爬下一页,把page改为2发现提示sign验证失败了 也就是说,快手在开发的时候考虑了有人抓包到接口后,通过修改参 ...
- Netty SSL性能调优
TLS算法组合 在TLS中,5类算法组合在一起,称为一个CipherSuite: 认证算法 加密算法 消息认证码算法 简称MAC 密钥交换算法 密钥衍生算法 比较常见的算法组合是 TLS_ECDHE_ ...
- Struts2入门介绍(二)
一.Struts执行过程的分析. 当我们在浏览器中输入了网址http://127.0.0.1:8080/Struts2_01/hello.action的时候,Struts2做了如下过程: 1.Stru ...
- Windows加密API的层次
Windows平台下的应用程序可以分为托管的.NET程序和本机的Win32(以及Win64)两大类..NET有着类似于JAVA的虚拟机和二进制码托管运行环境,提供了在不同Windows平台上的代码可携 ...
- gulp入门详情
gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码,而且大 ...
- 特殊引用类型(string)
private string FuncWithParameters(int param1, String param2, List<string> param3) { // 我们在这里改变 ...
- .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
dump文件相信有些朋友已经很熟悉了,dump文件的作用在于保存进程运行时的堆栈信息,方便日后排查软件故障,提升软件质量.关于dump分析工具windbg.adplus的文章更多了,如果您还不知道怎么 ...
- Lucence学习之一:全文检索的基本原理
本文转载自: http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623594.html 一.总论 根据http://lucene.ap ...
- SpringCloud实战之初级入门(三)— spring cloud config搭建git配置中心
目录 1.环境介绍 2.配置中心 2.1 创建工程 2.2 修改配置文件 2.3 在github中加入配置文件 2.3 修改启动文件 3. 访问配置中心 1.环境介绍 上一篇文章中,我们介绍了如何利用 ...