首页 > 编程语言 >python multiprocessing使用容易遇到的坑记录随笔

python multiprocessing使用容易遇到的坑记录随笔

时间:2022-11-30 11:57:34浏览次数:44  
标签:main python ppid ----- print new 随笔 multiprocessing

python因为有GIL(Global Interpreter Lock)锁的问题,所以在计算密集型程序中,推荐使用multiprocessing多进程编程。

在使用multiprocessing创建子进程时,很容易遇到一个不易发现的坑,这里记录一下。


import multiprocessing
import time
import threading
import os


def fun():

print("in new process, pid = {}, ppid={}".format(os.getpid(), os.getppid()))
print("in new thread, id = %s" % threading.current_thread().ident)

time.sleep(3)
print("process {} finish.".format(os.getpid()))


def main():
print("main pid = {}, ppid={}".format(os.getpid(), os.getppid()))
p = multiprocessing.Process(target=fun)
print("-----1")
p.start()
print("-----2")
p.join()
print("-----3")


if __name__ == '__main__':
main()
 

执行结果显示如下:

1 main pid = 114664, ppid=111764
2 in new process, pid = 114664, ppid=111764
3 in new thread, id = 106604
4 process 114664 finish.
5 -----1
6 -----2
7 -----3

发现,创建子进程并没有成功。fun()函数是串行的在主进程中运行的。

原因就出在fun后面的()号上。正确的使用方法,fun后面不能添加括号。

p = multiprocessing.Process(target=fun)

修改之后,程序执行结果如下:

main pid = 119200, ppid=109900
-----1
-----2
in new process, pid = 118472, ppid=119200
in new thread, id = 119512
process 118472 finish.
-----3

从结果可以看出,子进程创建成功,子进程和主进程并行执行。主进程等待子进程退出后再退出。

这个确实是一个容易被忽略的坑,不明白python为什么会让前者顺利执行,而不是选择报语法错误。

标签:main,python,ppid,-----,print,new,随笔,multiprocessing
From: https://www.cnblogs.com/muliublog/p/16937960.html

相关文章

  • day02 Python基础
    1.Python语法1.1编码使用工具写汉字、字母、数字,写完之后,你是需要保存到硬盘上卢慧yyds66601010101010101101010101001010101000111101一套编......
  • day01 环境搭建及python介绍
    1.Typora安装为什么要使用Typora的软件呢?是因为程序员不只是写代码这一件事,还需要给编写的代码写README文档,这个文档是说明程序如何使用的,README编写使用的就是Markd......
  • Python 中 -m 的典型用法、原理解析与发展演变
    在命令行中使用Python时,它可以接收大约20个选项(option),语法格式如下:python[-bBdEhiIOqsSuvVWx?][-ccommand|-mmodule-name|script|-][args]本文想要聊聊比较......
  • Python 依赖库管理哪家强?pipreqs、pigar、pip-tools、pipdeptree 任君挑选
    在Python的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份“requirements.txt”,记录下依赖库的名字及其版本号。那么,如何来生成这份文件呢?在上篇文章《​​由浅......
  • 开发者请注意:Python2 的最后版本将于 4 月发布,但它确实是在 1 月 1 日就寿命终止了!
    2020年1月1日是Python2的寿命终止日,这个日期在两年前经"Python之父"GuidovanRossum宣布,此后一直成为开发者社区翘首以盼的一天。昨天就是这个大快人心的日子,各种......
  • How to Install Python on Linux
    SummaryHostmonsterusesthepreinstalledversionofPythonthatshipswithCentOS.Becauseofthisitisoftennotthelatestrelease.Thisarticlewillexplain......
  • Python工具箱系列(十七)
    很多软件工程师都认为MD5是一种加密算法,然而这种观点是不对的。作为一个1992年第一次被公开的算法,到今天为止已经被发现了一些致命的漏洞。本文讨论MD5在密码保存方面的......
  • python编辑excel表格文件的简单方法练习
    一、创建一个Excel文件fromopenpyxlimportWorkbook#需要用到openpyxl模块来操作Excel文件。openpyxl需要先安装。#实例化对象wb=Workbook()#获取当前active的shee......
  • PYTHON 数据结构 - 元组
    1.1数据结构一般常用的有数组(Array),集合(Set),列表(List),队列(Queue),链表(Linkedlist),树(Tree),堆(Heap),栈(Stack),字典(Dictionary)Python中数据结构主要有序列,集合,字典......
  • 教你用Python制作BMI计算器
    案例介绍欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用Python相关知识,做一个BMI计算器的案例。你可以通过控制台的提示信息,输入身高和体重,注意单位,系......