python中的multiprocessing是一个多进程管理包,主要作用也就是提供多进程,而不是多线程,在其中用的比较多估计也就是Process和Pipe两个类,如下代码所示:

#!/usr/bin/env python

from multiprocessing import Process,Pipe

def fun(pipe,x):
pipe.send('hello,'+x) reciver,sender = Pipe()
proc = Process(target=fun,args=(sender,'kel',)) #传递参数为sender,其实传递的是reciver也是可以的
proc.start()
print reciver.recv()
proc.join()
print reciver.recv() #在等待接收

在创建Pipe()对象的时候,可以使用两个部分,一个是用来接收的,一个是用来发送的,如上的构造对象中,两者均可以用来发送和接收。

执行结果如下:

[root@python 55]# python simplePipe.py
hello,kel

发送的时候,发送的消息为kel然后返回值为hello,kel

创建Pipe的时候,返回的是一对对象,如下所示:

>>> from multiprocessing import Pipe
>>> p=Pipe()
>>> p
(<read-write Connection, handle 6>, <read-write Connection, handle 7>)

返回的都是可读可写的。

在multiprocessing的多进程管理中,主要是用Process来创建进程,从而来创建多进程的环境,也就是上面的例子代码Process

使用start方法来开启进程,使用join方法来结束进程

Process的语法结果如下:

class multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={})

一般需要指定的参数为target,表示为一个函数,这个函数必须是可调用的,args表示为target的参数,是一个元组的格式。注意在只有一个参数的时候,必须写上逗号,表示为一个tuple

>>> from multiprocessing import Process
>>> import time
>>> def kel():
... time.sleep(20)
...
>>> proc=Process(target=kel,args=())
>>> proc.pid #进程未开始的时候,pid为None
>>> proc.is_alive() #查看进程是否活动
False
>>> proc.start() #进程开始运行
>>> proc.pid
6117
>>> proc.is_alive()
True
>>> proc.is_alive() #程序执行完毕,进程自动关闭
False
>>> proc.join()

在操作系统层面,也是可以直接获取到进程,如下所示:

[root@python ~]# ps -ef|grep 6117
root 6117 6114 0 09:36 pts/1 00:00:00 python
root 6121 6091 0 09:36 pts/3 00:00:00 grep 6117

Pipe的语法如下:

multiprocessing.Pipe([duplex])

Pipe和Process配合,可以开启一个进程,然后读取函数执行的返回信息

当需要有多个进程的时候,可以使用如下的方式:

from multiprocessing import Pipe,Process

class Pool(object):
@classmethod
def spawn(cls,f):
def fun(pipe,x):
pipe.send(f(x))
pipe.close()
return fun @classmethod
def partmap(cls,f,X):
pipe = [Pipe() for x in X]
proc = [Process(target=cls.spawn(f),args=(c,x)) for x,(p,c) in zip(X,pipe)]
[p.start() for p in proc]
[p.join() for p in proc]
return [p.recv() for p,m in pipe] def kel(x):
return 'hello,',x print Pool.partmap(kel,['kel','smile'])

执行结果如下:

[('hello,', 'kel'), ('hello,', 'smile')]

主要是开启多个进程来执行相关的函数,在其中使用了闭包,主要就是执行这个函数,并且通过pipe来传递相关的消息

最新文章

  1. Werewolf流程分析
  2. python数据操作方法封装
  3. [转]论acm与泡妞
  4. 如何在WIN7下进行LINUX虚拟机搭建
  5. jquery.validate.unobtrusive.js插件作用
  6. 【crunch bang】论坛tint2配置讨论贴
  7. hilbert矩阵
  8. hdu 1195 Open the Lock
  9. 玩具装箱 bzoj1010 斜率优化
  10. 研究CPU的好文章以及博客
  11. 转载 C# BindingSource
  12. Python入门学习
  13. Google 以图搜图 - 相似图片搜索原理 - Java实现 (转)
  14. 背水一战 Windows 10 (100) - 应用间通信: 分享
  15. react-native中使用长列表
  16. ubuntu安装mysql,redis,python-mysqldb
  17. zabbix 邮件报警 监控mysql主从
  18. JavaWeb之tomcat安装、配置与使用(一)
  19. HDU 5956 The Elder (树上斜率DP)
  20. android 随手记 仿微信的popwindow

热门文章

  1. 数据库备份mysqldump
  2. matlab下kmeans及pam算法对球型数据分类练习
  3. 让一个 csproj 项目指定多个开发框架
  4. 在iOS中使用ZBar扫描二维码
  5. 如何用OpenCV跟踪鼠标操作
  6. Python: 为对象动态添加函数,且函数定义来自一个str
  7. linux的mysql
  8. 树的遍历——pat1043
  9. 老齐python-基础6(循环 if while for)
  10. cocos2d js的一些tip