python中的多线程和多进程,python进程数量

  python中的多线程和多进程,python进程数量

  

  多进程 multiprocessing

  因为Python是跨平台的,所以也应该提供跨平台的多进程支持。多处理模块是多处理模块的跨平台版本。

  多重处理模块提供了一个进程类来表示一个进程对象。

  Unix/Linux操作系统提供了一个fork()系统调用,很特别。普通函数调用一次返回一次,而fork()调用一次返回两次,因为操作系统自动复制当前进程(称为父进程)(称为子进程),然后分别在父进程和子进程中返回。

  子进程总是返回0,而父进程返回子进程的ID。原因是一个父进程可以分叉出很多子进程,所以父进程要记下每个子进程的ID,而子进程只有通过调用getppid()才能得到父进程的ID。

  Python的Os模块封装了常见的系统调用,包括fork,可以很容易地在Python程序中创建子进程:

  进口货

  打印(进程(%s)开始.%os.getpid())

  # OnlyworksonUnix/Linux/MAC :

  pid=os.fork()

  ifpid==0:

  print( Iamchildprocess(% s)and my parentis % s . %(OS . getpid(),os.getppid()))

  else:

  print( I(% s)justcreatedachildprocess(% s)。% (os.getpid(),pid))运行如下:

  流程(69673)开始.

  I(69673)justcreatedachildProcess(69674)

  IAMDPROCES (69674)和myParentis69673。通过fork调用,流程可以在收到新任务时复制一个子流程来处理它。常见的Apache服务器是父进程监听端口,每当有新的http请求,就分叉出子进程来处理新的http请求。

  但是这个分叉在windows操作系统中是没有的。因此,出现了一个处理fork的通用模块,以保证不同操作系统之间的调用。

  多处理模块是多处理模块的跨平台版本。

  多重处理模块提供了一个进程类来表示一个进程对象。以下示例说明了如何启动子流程并等待其结束:

  #!/usr/bin/envpython

  #编码=utf-8

  fromt多重处理导入过程

  进口货

  子进程要执行的代码

  defrun_proc(名称):

  print( Runchildprocess % s(% s)%(name,os.getpid()))

  if__name__==__main__:

  print( parent process % s . % OS . getpid())

  p=进程(target=run_proc,args=(test_code ,))

  print(Childprocesswillstart。)

  开始()

  连接()

  print(Childprocessend .)的执行结果)如下:

  $ pythonforkbymutilprocessing . py

  Parentprocess70227。

  Childprocesswillstart。

  Runchildprocesstest_code(70228)

  ChildProcessend。创建子流程时,只需要传入一个函数及其参数,创建一个流程实例,用start()方法启动,这样创建流程就比fork()简单了。

  join()方法可以等待子进程结束后再继续向下运行,通常用于进程间的同步。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: