进程创建

进程创建:

第一种:直接创建

第二种;利用类来实现

第一种:直接创建

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. Python中socket经ssl加密后server开多线程

            前几天手撸Python socket代码,撸完之后经过ssl加密,确保数据的安全,外加server端开启多线程保证一个客户端连接有一个线程来服务客户端,走了不少的弯路,网上的信息啥的要 ...

  2. FastDFS安装、配置、部署(一)-安装和部署 (转)

    FastDFS是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,FastDFS非常适用于基于文件服务的站点,例如图片分享和视频分享网站 Fast ...

  3. ASP.NET实现数据绑定

    一.数据绑定语法 数据绑定表达式包含在“<%#”和“%>”分隔符之内,并使用Eval方法和Bind方法.Eval方法用于定义单向(只读)绑定,Bind方法用于定义双向(可更新)绑定. 语法 ...

  4. Python学习--两种方法爬取网页图片(requests/urllib)

    实际上,简单的图片爬虫就三个步骤: 获取网页代码 使用正则表达式,寻找图片链接 下载图片链接资源到电脑 下面以博客园为例子,不同的网站可能需要更改正则表达式形式. requests版本: import ...

  5. ssh 端口转发实现外网 80 端口映射到内网 80 端口

    开发中经常需要外网服务映射到本机内网服务的需要,便于调试. 以前都是同事帮着配,这两天自己也看了一下 ssh 端口转发. 同事分分钟钟搞定的事情,自己折腾了 2 天, 真是弱爆了. 最初老想不明白一件 ...

  6. 没有循环的JavaScript

    有些文章中提到过,缩进(并不能特别准确的)说明了代码的复杂程度.我们想要的是简单的JavaScript.之所以层层缩进,是因为我们用抽象的方式解决问题.但要选用什么抽象方法呢?截止目前,我们没有在特定 ...

  7. Spark on YARN模式的安装(spark-1.6.1-bin-hadoop2.6.tgz + hadoop-2.6.0.tar.gz)(master、slave1和slave2)(博主推荐)

    说白了 Spark on YARN模式的安装,它是非常的简单,只需要下载编译好Spark安装包,在一台带有Hadoop YARN客户端的的机器上运行即可.  Spark on YARN简介与运行wor ...

  8. Vim改装成一个IDE编程环境

      1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个 ...

  9. CSS ::Selection的使用方法

    大家都知道浏览器对选中的文本默认样式都是统一的,Windows下是一个深蓝色的背景,白字的前景,而在Mac下是一个淡蓝色背景,白色字体,就如上图所展示的一样,自从有了这个“::selection”选择 ...

  10. Scrapy框架学习(一)Scrapy框架介绍

    Scrapy框架的架构图如上. Scrapy中的数据流由引擎控制,数据流的过程如下: 1.Engine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取得URL. 2.En ...