1.使用Pool来创建进程

from multiprocessing import Pool
def f(n):
return n*n
if __name__=="__main__":
p=Pool(5)
a=range(10)
print(p.map(f,a))

p.map会将a列表中的数据依次循环给f函数。但是当函数需要两个参数时,该方法不适用。

2.使用Process来创建进程

def info(title):
print title
print 'module name:', __name__
if hasattr(os, 'getppid'): # only available on Unix
print 'parent process:', os.getppid()
print 'process id:', os.getpid() def f(name):
info('function f')
print 'hello', name if __name__ == '__main__':
info('main line')
p = Process(target=f, args=('bob',))
p.start()
p.join() #串行

3.使用Pool.apply_async(异步)

from multiprocessing import Pool
import time def f(n):
print n*n
time.sleep(1)
return n*n if __name__ == '__main__':
p = Pool(processes=5)
res_list = []
for i in range(10):
res = p.apply_async(f,[i,])
res_list.append(res) for item in res_list:
print item.get()

共享内存的三种方法

1.使用multiprocessing中的Queue(将Queue封装了)

from multiprocessing import Process, Queue
import Queue as Q2
def f(q,n):
q.put([n, 'hello'])
print q.get()
if __name__ == '__main__':
q = Q2.Queue()
for i in range(5):
p = Process(target=f, args=(q,i))
p.start()
# print q.get() # prints "[42, None, 'hello']" from multiprocessing import Process, Lock
import time
def f(i):
# l.acquire()
time.sleep(1)
print 'hello world', i
# l.release() if __name__ == '__main__':
# lock = Lock()
for num in range(10):
Process(target=f, args=[num]).start()

2.使用values和array(灵活性较差,不推荐使用)

from multiprocessing import Process, Value, Array

def f(n, a):
n.value = 3.1415927
for i in range(len(a)):
a[i] = -a[i] if __name__ == '__main__':
num = Value('d', 0.0)
arr = Array('i', range(10)) p = Process(target=f, args=(num, arr))
p.start()
p.join() print num.value
print arr[:]

3.使用Manager

from multiprocessing import Process, Manager

def f(d, l):
d[1] = ''
d[''] = 2
d[0.25] = None
l.reverse() if __name__ == '__main__':
manager = Manager() d = manager.dict()
l = manager.list(range(10)) p = Process(target=f, args=(d, l))
p.start()
p.join() print d
print l

python 进程创建和共享内容的方法的更多相关文章

  1. Python中创建ndarrary的20中方法

    本文完整示例:完整示例代码 本文介绍了基础的.常用的创建ndarrary的多种方法,附带示例代码. 一.通过ndarray创建 import numpy as np 1.1 一维数组 a = np.a ...

  2. python 识别二维码内容的方法

    识别二维码链接的方式有多种,那么如何用python 的方法实现识别呢? 请看如下代码: from pyzbar.pyzbar import decode from PIL import Image i ...

  3. python之创建文件写入内容

    https://www.cnblogs.com/evablogs/p/7096686.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2 ...

  4. python中从键盘输入内容的方法raw_input()和input()的区别

    raw_input()输出结果都是字符串 Input()输入什么内容,输出就是什么内容

  5. [ python ] 进程的操作

    目录 (见右侧目录栏导航)- 1. 前言- 2. multiprocess模块- 2.1 multiprocess.Process模块    - 2.2 使用Process模块创建进程    - 2. ...

  6. Python 动态创建函数【转】

    知乎上也有相似的问题 偶然碰到一个问题,初想是通过动态创建Python函数的方式来解决,于是调研了动态创建Python函数的方法. 定义lambda函数 在Python中定义lambda函数的写法很简 ...

  7. 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)

    在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通 ...

  8. Python 进程之间共享数据

    最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享  在mp库当中,跨进程对象共享有三种方式,第一种 ...

  9. python全栈开发 * 进程理论 进程创建 * 180724

    一.进程理论 1.进程是资源分配的最小单位. 2.进程调度就是多个进程在操作系统的控制下被CPU执行,去享用计算机的资源. 先来先服务 短作业优先 时间片轮转 多级反馈队列 3.进程调度的过程是不能够 ...

随机推荐

  1. ionic-input单选复选杂交

    <label class="toggle toggle-positive"> <input type="radio" ng-model=&qu ...

  2. python中的面向对象学习之继承实例讲解

    __author__ = "Yanfeixu" class School(object): # object是基类,所有的类都是继承这个--新式类 def __init__(sel ...

  3. oracle查看表中否存在某字段,数据库是否存在某张表

      数据库是否存在某字段 SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME = '表名' AND COLUMN_NAME = '字段名'; ...

  4. 微信小程序选择视频,视频上传,视频播放

    请查看链接地址看具体详情: 选择视频: https://mp.weixin.qq.com/debug/wxadoc/dev/api/media-video.html#wxchoosevideoobje ...

  5. J - Jesus Is Here HDU - 5459 (递推)

    大意: 定义$f_1="c",f_2="ff",f_n=f_{n-2}+f_{n-1}$, 求所有"cff"的间距和. 记录c的个数, 总长 ...

  6. vivado实现模16的计数器

    `timescale 1ns / 1ps module ctr_mod_16( clk, rst_n, count ); input clk, rst_n; :] count; wire clk, r ...

  7. python-day74--知识总体总结

    1. 课程介绍        - 数据类型        - 函数        - 面向对象三大特性:继承,封装,多态        - socket:本质传输字节:所有网络通信都基于socket  ...

  8. 成功解决You are using pip version 9.0.1, however version 9.0.3 is available. You should consider upgra

    解决问题 You are using pip version 9.0.3, however version 10.0.1 is available.You should consider upgrad ...

  9. Highcharts 配置语法

    Highcharts 配置语法 本章节我们将为大家介绍使用 Highcharts 生成图表的一些配置. 第一步:创建 HTML 页面 创建一个 HTML 页面,引入 jQuery 和 Highchar ...

  10. Js replace() 方法笔记

    最近捣鼓着学习Js,发现replace()真的很有用,替换功能杠杠的棒. 接下来看看我遇到的问题: 有两个随机给出的字符串,字符串1'xxxxxx',字符串2'====T'(这两个用作示例,其他为随机 ...