进程创建

进程创建:

第一种:直接创建

第二种;利用类来实现

第一种:直接创建

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的更多相关文章

  1. Python学习进程

    1周第1天 主要是变量的学习(11月8日) 1.1 python安装(win和linux下)1.2 ipython安装及使用1.3 变量的定义1.4 变量赋值1.5 运算符(赋值.算术.关系.逻辑)1 ...

  2. Python学习进程(13)文件与IO

        本节介绍基本的IO函数和文件的读写操作.     (1)读取键盘输入: Python用于读取键盘输入的函数有两个:raw_input与input. 1)raw_input函数 从标准输入读取一 ...

  3. Python学习进程(12)模块

        模块让你能够有逻辑地组织你的Python代码段.     (1)python模块: 模块化的好处: 1.把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 2.模块也是Python对象, ...

  4. Python学习进程(3)Python基本数据类型

        本节介绍在Python语法中不同的变量数据类型.     (1)基本数据类型: >>> a=10; >>> b=10.0; >>> c=T ...

  5. Python学习进程(2)Python环境的搭建

        本节主要介绍在windows和Linux平台上如何搭建Python编程环境.     (1)查看Python版本: windows: C:\Users\JMSun>python 'pyt ...

  6. Python学习进程(1)Python简介

        Python是一种结合了"解释性"."编译性"."互动性"和"面向对象"的脚本语言. (1)官方介绍: Pyth ...

  7. Python学习进程(15)常用内置函数

        本节介绍Python的一些常用的内置函数.     (1)cmp(x, y): cmp()函数比较 x 和 y 两个对象,并根据比较结果返回一个整数,如果 x<y,则返回-1:如果x&g ...

  8. Python学习进程(14)异常处理

        本节介绍Python进行异常处理的方式,异常处理机制可以帮助我们调试python程序.     (1)异常的简介:     异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行 ...

  9. Python学习进程(11)日期和时间

        本节介绍Python应用程序处理时间和日期的方式.其中转换日期格式是最常用的功能.     (1)获取时间戳: Python 提供了一个 time 和 calendar 模块可以用于格式化日期 ...

随机推荐

  1. JAVA学习1:Maven3环境搭建

    好长时间不用Java,今天看了下,Maven集成成主流了,在技术水平与日俱进的同时,感叹下IT行业必须有活到老学到老的精神. 先说下环境: Maven:Maven 3.0.5 解压后路径:F:\Mav ...

  2. Asp.Net webconfig中使用configSections的用法

    最近闲来无事,研究研究公司的框架,无意中打开了webconfig页面,发现了一个我不认识的节点<configSections></configSections>,于是百度之,大 ...

  3. SpringMVC入门(一)

    非注解的SpringMVC 1.创建一个web工程 2.导入工程需要的jar包 3.配置SpringMVC的前端控制器  前端控制器(DispatcherAdapter)需要在web.xml文件中进行 ...

  4. 转 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:

    因为yum包使用python2*等开发,修该为环境修改python3之后有问题, 解决: 修改文件/usr/bin/yum./usr/libexec/urlgrabber-ext-down头中相应py ...

  5. [转]oracle update set select from 关联更新

    本文转自:http://blog.csdn.net/disiwei1012/article/details/52589181 http://www.blogjava.net/Jhonney/archi ...

  6. 项目开发-->基础功能汇总

    祭奠曾经逝去的青春…… 1.基础功能汇总-->身份认证及用户登录模块 2.基础功能汇总-->一键登录功能汇总 3.堆和栈 4.变量

  7. 微信小程序开发框架整理

    目前除了原生的微信小程序开发外,各大厂商陆续造了自己的开发框架,现整理如下: WePY 腾讯官方开源的小程序组件化开发框架,目前有15K+Star ,一直在更新着,社区活跃,掉坑能快速的找到方法爬出来 ...

  8. springboot项目作为war包运行

    一.首先是pom文件中设置打成war包 < packaging>war< /packaging> 二.然后是修改依赖: <dependency> <group ...

  9. 梯度寻优与logistic算法

    一.一些基本概念 最优化:在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优.高中学过的线性规划就是一类典型的最优化问题. 凸集:在集合空间中,凸集就是一个向四周凸起的图形.用数学 ...

  10. 我的Java编码规范

    1.类名采用驼峰命名法,首字母大写. 2.类变量采用驼峰命名法,首字母小写. 3.方法名是一个动词短语,首字母小写,尽量能描述清楚这个方法的意图. 4.注释在精不在多,一个好的注释要尽量描述出这段代码 ...