Python:多进程。
Posted Mr-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:多进程。相关的知识,希望对你有一定的参考价值。
参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064
Python程序实现多进程(multiprocessing)
了解linux的Fork系统调用(wiki)
在计算机领域中,尤其是Unix及类Unix系统操作系统中,fork(进程复制)是一种创建自身行程副本的操作。它通常是内核实现的一种系统调用。Fork是类Unix操作系统上创建进程的一种主要方法,甚至历史上是唯一方法。
在多任务操作系统中,行程(运行的程序)需要一种方法来创建新进程,例如运行其他程序。
如果进程需要启动另一个程序的可执行文件,它需要先Fork来创建一个自身的副本。然后由该副本即“子进程”调用exec系统调用,用其他程序覆盖自身:停止执行自己之前的程序并执行其他程序。
当一个进程调用fork时,它被认为是父进程,新创建的进程是它的孩子(子进程)。在fork之后,两个进程不仅运行着相同的程序,并且它们恢复执行(好像它们都已被系统调用)both processes not only run the same program, but they resume execution as though both had called the system call. 。然后它们可以检查调用的返回值确定其状态:是父进程还是子进程,以及据此行事。
Ruby的多进程处理模块Process
Ruby核心模块Process提供了大量和unix对应的接口方法。
fork[{block}] -> integer or nil
创建子进程。如果提供了block则会在子进程内运行。子进程终止会返回一个状态码0。
调用fork会返回两次,一次是父进程,它返回孩子进程的ID; 另一次是孩子进程,返回nil。
孩子进程使用Kernel.exit!来退出。
父亲进程需要使用Process.wait来收集孩子进程的终止状态码。
exec([env,] command...[,options])
子进程调用exec方法,通过运行参数的命令取代当前进程。
pid -> integer
返回当前进程的id. Process.pid => 37415
ppid -> integer
返回当前进程的父进程的id.
- puts "#{Process.pid}" Process.fork { puts "child_id:#{Process.pid} father_id:#{Process.ppid}"}
- 第一行代码输出当前进程的id
- 第二行代码使用fork带一个块,块在子进程内运行,输出子进程自身的id, 和父进程的id,使用ppid方法,即parent process id。
多线程教程:https://www.runoob.com/ruby/ruby-multithreading.html
Python多进程
OS模块
Python的os
模块封装了常见的系统调用,其中就包括fork
,可以在Python程序中轻松创建子进程
import os print(‘Process (%s) start...‘ % os.getpid()) # Only works on Unix/Linux/Mac: pid = os.fork() if pid == 0: print(‘I am child process (%s) and my parent is %s.‘ % (os.getpid(), os.getppid())) else: print(‘I (%s) just created a child process (%s).‘ % (os.getpid(), pid))
- os.getpid()返回当前进程id
- os.getppid()返回当前进程的父进程的id。
注意:Windows没有fork
调用。
multiprocessing--Process-based parallelism
这个模块支持Win和Unix系统。
Process类
创建一个Process对象,然后调用它的start()方法。
join([timeout])方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
以上是关于Python:多进程。的主要内容,如果未能解决你的问题,请参考以下文章