WEB开发网
开发学院软件开发Python 使用 Python 实现多进程 阅读

使用 Python 实现多进程

 2010-09-22 11:23:22 来源:WEB开发网   
核心提示:简介在 IBM® developerWorks® 的 早期文章 中,我演示了使用 Python 实现线程式编程的一种简单且有效的模式,使用 Python 实现多进程,但是,这种方法的一个缺陷就是它并不总是能够提高应用程序的速度,首先,在我们实际使用进程模块之前,因为全局解释器锁(Global Inter

简介

在 IBM® developerWorks® 的 早期文章 中,我演示了使用 Python 实现线程式编程的一种简单且有效的模式。但是,这种方法的一个缺陷就是它并不总是能够提高应用程序的速度,因为全局解释器锁(Global Interpreter Lock,GIL)将线程有效地限制到一个核中。如果需要使用计算机中的所有核,那么通常都需通过 对 经常使用 fork 操作来实现,从而提高速度。处理进程组是件困难的事情,因为为了在进程之间进行通信,需要对所有调用进行协调,这通常会使事情变得更复杂。

幸运的是,自 2.6 版本起,Python 包括了一个名为 “多进程(multiprocessing)” 的模块来帮助处理进程。该进程模块的 API 与线程 API 的工作方式有些相似点,但是也存在一些需要特别注意的不同之处。主要区别之一就是进程拥有的一些微妙的底层行为,这是高级 API 永远无法完全抽象出来的。可以从多进程模块的官方文档中了解有关这方面内容(参见 参考资料 小节)。

fork 简介

进程和线程在并发性的工作原理方面存在一些明显的差异。通过阅读我撰写的有关线程的 developerWorks 文章,可以进一步了解这些差异(参见 参考资料)。在进程执行 fork 时,操作系统将创建具有新进程 ID 的新的子进程,复制父进程的状态(内存、环境变量等)。首先,在我们实际使用进程模块之前,先看一下 Python 中的一个非常基本的 fork 操作。

fork.py

#!/usr/bin/env python 
 
"""A basic fork in action""" 
 
import os 
 
def my_fork(): 
  child_pid = os.fork() 
  if child_pid == 0: 
    print "Child Process: PID# %s" % os.getpid() 
  else: 
    print "Parent Process: PID# %s" % os.getpid() 
 
if __name__ == "__main__": 
  my_fork() 
 

1 2 3 4 5 6  下一页

Tags:使用 Python 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接