在Python中,如果我们希望并发的执行一些任务,最简单的办法是使用os下面的fork()方法,例如

import osprint("OSFork")contentStr = 'hello'pid = os.fork()
if pid == 0:contentStr = contentStr + ' child'print(contentStr)
else:contentStr = contentStr + ' parent'print(contentStr)print("over")

运行一下,打印结果如下

dengyuguodeMacBook-Air:python dengyuguo$ /usr/bin/python3 /Users/dengyuguo/Desktop/python/OSFork.py
OSFork
hello parent
over
hello child
over

第一次看到这种写法跟运行结果可能会感觉比较奇怪。实际上这里Python是借鉴了linux系统对多线程的实现,准确点说是多进程。

linux系统中,fork()方法会产生一个新的进程,并且和当前进程一起返回,差别是当前进程中会返回创建的子进程的pid,而子进程中返回的pid是0。后续的逻辑在两个进程中都会执行,我们能够通过返回的pid是否为0来判断代码是跑在子进程,还是当前进程。

数据问题,fork()函数执行后,子进程会共享父进程的内存空间,但是这个内存空间被标记为“写时复制”。所谓写时复制,指的是两个任务可以同时自由的读取内存,但任意一个任务试图对内存进行修改时,内存就会复制一份提供给修改方单独使用,以免影响到其他的任务使用。

理解了背后的设计逻辑,再看上面的代码,就感觉很清晰了。

python中os.fork()方法相关推荐

  1. python中os.fork()理解

    import ospid = os.fork()if 0 > pid:print('调用出错') elif 0 == pid:print('我是子进程%s我的父进程是%s' % (os.getp ...

  2. Python中os和shutil模块实用方法集锦

    Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...

  3. Python中sys.argv方法的一些典型用法

    本文整理汇总了Python中sys.argv方法的典型用法代码示例. 示例1: weather_icons # 需要导入模块: import sys [as 别名] # 或者: from sys im ...

  4. Python中os库的使用

    文章目录 Python中os库的使用 1. path子库 1.1 获取绝对路径 1.2 归一化path的表示形式 1.3 得到文件的相对路径 1.4 获取目录名 1.5 获取文件名 1.6 路径组合 ...

  5. python中os.path.join()的循环用法_Python os.path.join()用法及代码示例

    Python中的OS模块提供了与操作系统进行交互的功能.操作系统属于Python的标准实用程序模块.该模块提供了使用依赖于操作系统的功能的便携式方法. os.path模块是Python中OS模块的su ...

  6. Python中os.listdir的排序问题

    参考  Python中os.listdir的排序问题 - 云+社区 - 腾讯云 上周应别人要求,使用python批量修改文件名称. 文件名有规律,当时就用了一个函数直接精确的用文件名替换了.后来想直接 ...

  7. Python中图片处理方法 (总结)

    Python中图片处理方法 -- 进阶 一级目录 1.Python中将源文件夹中图片复制到指定文件夹 2.Python中获取文件夹内指定后缀的所有文件的文件名 三级目录 一级目录 1.Python中将 ...

  8. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  9. python使用方法-在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

最新文章

  1. AI又被彩虹吹!​网易被预言为“下一个百度”?
  2. 【转载】Linux安装配置Qt
  3. 分享python os.system一点心得
  4. python函数修饰器_Python函数装饰器指南
  5. Android ToolBar的使用
  6. 视频监控技术 迎来网络“多媒体”时代
  7. LeetCode 1429. 第一个唯一数字(map+queue)
  8. nginx正向代理 反向代理
  9. 前端笔记—第4篇CSS基础知识2
  10. [Android Pro] 关于BitmapFactory.decodeStream(is)方法无法正常解码为Bitmap对象的解决方法...
  11. 软件接收机射频信号源matlab程序,射频信号源
  12. B站小甲鱼Python基础学习课堂笔记
  13. Mac软件打开提示:已损坏,无法打开。您应该将它移到废纸娄 怎么解决?
  14. SecureCRT 水平显示不全解决办法
  15. nginx 反向代理 ElasticSearch es
  16. 单片机教学打铃控制器C语言
  17. ResNeXt算法详解(resnet提升篇)
  18. 通过sql语句查询实现分页
  19. 前端笔记 (持续更新~)
  20. vue前端导出excel,js-xlsx、xlsxStyle,可设置样式、表格合并;(包含获取excel列数函数、excel合并表格缺少边框处理函数)

热门文章

  1. 世上只有妈妈好用计算机谭,世上只有妈妈好
  2. LXC与Docker介绍
  3. 对spring JdbcTemplate 代码的一些理解
  4. $.getJSON之不执行回调函数-yellowcong
  5. 基于知识图谱的《红楼梦》人物关系可视化及问答系统的实现
  6. 如何将XP升级到win7
  7. Android 手机距离感知器 代码实现
  8. Elasticsearch概述
  9. listview winfrom 表头_C# 设置Listview的Columns标头颜色和高度
  10. python冒泡排序算法非递归_python 冒泡排序,递归