python中multiprocessing模块

multiprocess模块那来干嘛的?

答:利用multiprocessing可以在主进程中创建子进程。

#该模块和Threading模块使用方法基本类似。

  • 首先需要说明,你所使用多线程的函数不能有return,比如你要将job这个函数多线程那么在job这个函数里就不能有return,如果有返回值请看文章的最后。
  • multiprocessing最好写在if __name__ == ‘__main__‘当中,如果不放在这里面,windows可能会出错。其余环境则不会出现这种情况。我第一个案例没有加,第二个案例加了。

案例:

 1 #!usr/bin/env python
 2 #encding:utf-8
 3 #by i3ekr
 4
 5 import multiprocessing,time
 6
 7 def job(q,a):#将Queue当参数传入,且必须放在首位。
 8     time.sleep(3)
 9     print ‘this is test...%s‘%(a)
10
11
12 start = time.time()
13 q = multiprocessing.Queue()#定义一个Queue,这个Queue是必须的。
14 p1 = multiprocessing.Process(target=job,args=(q,1))#创建一个线程,第一个q是Queue,第二个是参数的value。如果没有参数的话必须要(q,)逗号是必须要加的
15 p2 = multiprocessing.Process(target=job,args=(q,2))
16 p1.start()
17 p2.start()
18 p1.join()
19 p2.join()
20 end = time.time()
21 print("run time is %s"%(end-start))

输出结果:

[email protected]:/home/i3ekr/Desktop# python 1.py 
this is test...1
this is test...2
run time is 3.0163371563



那么函数有返回值的时候怎么做?

使用队列.put()进行保存值。使用get得到返回值。如下案例所示:

需要注意得是:

  • 有多少个返回值就要有多少个get。并不是一下子把所有得返回值全都一起输出之类得。如下代码20-21行,因为有两个线程,所以执行了两遍job函数,所以也有两个返回值。故也必须要有两个get去得到value
 1 #!usr/bin/env python
 2 #encding:utf-8
 3 #by i3ekr
 4
 5 import multiprocessing,time
 6
 7 def job(q,a):
 8     time.sleep(3)
 9     q.put(a)#得到a
10
11
12 if __name__ == ‘__main__‘:
13     start = time.time()
14     q = multiprocessing.Queue()
15     p1 = multiprocessing.Process(target=job,args=(q,1))
16     p2 = multiprocessing.Process(target=job,args=(q,2))
17     p1.start()
18     p2.start()
19     p1.join()
20     p2.join()
21     res1 = q.get()#得到job得返回值
22     res2 = q.get()
23     print res1,res2
24     end = time.time()
25     print("run time is %s"%(end-start))

输出结果:

[email protected]:/home/i3ekr/Desktop# python 1.py
1 2
run time is 3.01186394691

原文地址:https://www.cnblogs.com/nul1/p/8964843.html

时间: 2024-08-26 02:55:24

python中multiprocessing模块的相关文章

python中multiprocessing模块之Pipe管道

multiprocessing.Pipe([duplex]) 返回2个连接对象(conn1, conn2),代表管道的两端,默认是双向通信.如果duplex=False,conn1只能用来接收消息,conn2只能用来发送消息.不同于os.open之处在于os.pipe()返回2个文件描述符(r, w),表示可读的和可写的 实例如下: #!/usr/bin/python #coding=utf-8 import os from multiprocessing import Process, Pip

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST

Python中ConfigParser模块应用

Python中ConfigParser模块应用 Python的ConfigParser模块定义了3个对INI文件进行操作的类 RawConfigParser,ConfigParser和SafeConfigParser.其中RawCnfigParser是最基础的INI文件读取类,ConfigParser.SafeConfigParser支持对%(value)s变量的解析. 下面看看怎样通过ConfigParser类来解析一个ini文件. 配置文件settings.cfg [DEFAULT] myk

python中的模块安装

python中的模块研究: 需要用import导入的模块都是用python实现的. 内建的部分是用c.c++实现的. pypi:第三方的python包. 在windows上安装python: 1.安装python到C:\PythonXX,添加系统环境变量path:C:\PythonXX. 安装pypi库的方法三种方法: 1.在pypi上下载安装包离线安装 cd  $package-dir python   setup.py  install 在windos的cmd上也可以这样安装. 3.用eas

python中threading模块详解(一)

python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thread模块更高层的API来提供线程的并发性.这些线程并发运行并共享内存. 下面来看threading模块的具体用法: 一.Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行. 这里对使用多线程并发,和不适用多线程并发做

Python中optionParser模块的使用方法[转]

本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: ? 1 2 3 4 5 6 7 8

【转】关于python中re模块split方法的使用

注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于python中re模块split方法的使用 已有 3094 次阅读 2014-3-12 11:30 |系统分类:科研笔记 今天在写一段小代码的时候需要用到re.split()方法,在使用的过程中发现了一个以前不知道的新用法,发现这个用法还是挺实用的,就把它记录下来: >>> m = re.s

python中MySQLdb模块用法实例

篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作. python连接mysql的方案有oursql.PyMyS

Python中peewee模块

Python中peewee模块,有需要的朋友可以参考下. 前言关于ORM框架: 简介: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言里使用的"虚拟对象数据库". 对象关系映射(Object-Relational Mapping)提供了概念性的.易于理解的模型化数据的方法.ORM方法论基于三个核心