参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064

Python程序实现多进程(multiprocessing)

  • Fork系统和Ruby相关
  • Python多进程
    • os模块
    • multiprocessing模块:Process类,Pool类
    • 子进程subprocess模块
    • multiprocessing中的Pipe()和Queue(), 以及Connection对象。

了解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}\nfather_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程序中轻松创建子进程。

fork函数,调用一次,返回2次:

分别在子进程返回0,在父进程返回子进程的ID,这样设计的原因是:

  1. 一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,
  2. 而子进程只需要调用getppid()就可以拿到父进程的ID
import os

print("current process %s" % os.getpid())  #输出当前进程的												

Python:多进程。的更多相关文章

  1. Python多进程编程

    转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...

  2. Python多进程(1)——subprocess与Popen()

    Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持多处理器技 ...

  3. Python多进程使用

    [Python之旅]第六篇(六):Python多进程使用   香飘叶子 2016-05-10 10:57:50 浏览190 评论0 python 多进程 多进程通信 摘要:   关于进程与线程的对比, ...

  4. python多进程断点续传分片下载器

    python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...

  5. Python多进程multiprocessing使用示例

    mutilprocess简介 像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多. import multipr ...

  6. Python多进程并发(multiprocessing)用法实例详解

    http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...

  7. python 多进程开发与多线程开发

    转自: http://tchuairen.blog.51cto.com/3848118/1720965 博文作者参考的博文:  博文1  博文2 我们先来了解什么是进程? 程序并不能单独运行,只有将程 ...

  8. Python多进程----从入门到放弃

    Python多进程 (所有只写如何起多进程跑数据,多进程数据汇总处理不提的都是耍流氓,恩,就这么任性) (1)进程间数据问题,因为多进程是完全copy出的子进程,具有独立的单元,数据存储就是问题了 ( ...

  9. day-4 python多进程编程知识点汇总

    1. python多进程简介 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心.Python提供了非常好用的多进程包multiprocessing,他提供了一 ...

  10. python 多进程 logging:ConcurrentLogHandler

    python 多进程 logging:ConcurrentLogHandler python的logging模块RotatingFileHandler仅仅是线程安全的,如果多进程多线程使用,推荐 Co ...

随机推荐

  1. (长期更新)【python数据建模实战】零零散散问题及解决方案梳理

    注1:本文旨在梳理汇总出我们在建模过程中遇到的零碎小问题及解决方案(即当作一份答疑文档),会不定期更新,不断完善, 也欢迎大家提问,我会填写进来. 注2:感谢阅读.为方便您查找想要问题的答案,可以就本 ...

  2. Linux札记

    1. tar.gz 压缩命令:tar  -zcvf   压缩文件名.tar.gz   被压缩文件名 解压命令:tar  -zxvf   压缩文件名.tar.gz

  3. [转帖]nginx配置ssl证书实现https访问

    https://www.cnblogs.com/tianhei/p/7726505.html 今天就是如此处理的 感觉挺不错的. 一,环境说明 服务器系统:ubuntu16.04LTS 服务器IP地址 ...

  4. 数据排序 sort

    排序命令: 常和管道进行协作的命令  -sort  (默认使用字符的第一个字符进行排序) -n  按数字排序 -r  反序排序 -o  结果 输出到文件 -t  分隔符 (sort -n -t &qu ...

  5. k8s基础知识

    k8s部署到云计算上的优势 传统模式: 在k8s外部部署一个外置调度器,请求先到物理node节点ip地址,由物理服务地址再转发代理至service地址,如果node节点也是私网地址呢,就需要再外部部署 ...

  6. Unknown custom element: <swiper>

    刚开始使用VUE,一直提示这个,后来才发现是注册组件时注册反了:先新建VUE实例再注册组件是问题根源,调转一下顺序即可解决

  7. Boot-crm管理系统开发教程(一)

    ps:上周就把这个项目写完了,一直忘记记录,现在补上. Boot-crm是书上第十八章的内容,书上提供了前端的代码,所以只需要写后端的代码就可以了,①所以我们先把前端的代码移植到项目中. ②然后在li ...

  8. X86逆向1:软件破解入门课【课件下载】

    从本节课开始,我将带领小白入门学习软件破解的相关内容,大佬绕过,以后将会定期更新从最基本的破解知识点开始学习,由简单到复杂循序渐进,难度会逐步提高. 为了防止版权方面的争议,我将自行编写一些破解案例来 ...

  9. 18-Perl 错误处理

    1.Perl 错误处理程序运行过程中,总会碰到各式各样的错误,比如打开一个不存在的文件.程序运行过程中如果出现错误就会停止,我们就需要使用一些检测方法来避免错误,从而防止程序退出.Perl 提供了多中 ...

  10. Validator自动验证与手动验证

    自动: public JResult projectAdd(@Valid Project project, BindingResult result) {Map<String,Object> ...