我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python: Windows下用 mu

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python: Windows下用 mu

笔者某天在测试多进程时, 发现了一个问题
测试代码:

#coding: utf8
from multiprocessing import Process 
import os 
print('Global_print', os.getpid())
def run_proc(name):

   print('Run child process %s (%s)…' % (name, os.getpid()))
if __name__=='__main__': 
   p = Process(target=run_proc, args=('test',)) 
   print(os.getpid()) 
   p.start()

上述代码不复杂, 肉眼就能猜出八九分: 父进程来执行了首尾的两个 print, 而子进程则只执行 run_proc 。

下面就这针对这一个猜测来验证:

在Linux下:

'Global_print', 14382
14382
Run child process test (14383)…

很符合我们的预期, 因为两次 os.getpid() 得到了一样的结果, 而子进程的那句输出也从侧面验证了另外两句 print 是父进程执行的.

接下来看下 Windows:

What ???...

在测试了 debian/centos 等等 unix/linux 不同发行版和不同 Python 版本, 表现均为一致, 也就是上面 Linux 的输出。

然而,在 Windows下也也是很顽固的和上面的输出不一致。众所周知, Windows 和 Linux 在实现多进程上面是有点区别的..

于是, 感觉应该是 Windows 自身的问题, 在咨询了大佬之后, 得知官网早已有对这块进行说明了:

传送门: https://docs.python.org/2/library/multiprocessing.html?highlight=process#windows

资料说明如下:
Python: Windows下用 multiprocessing 的深坑

简单的意思应该是下面这样:
因为 Windows 缺乏 Linux 那种 fork, 所以它会有一些额外的限制:

  • 不管是绑定还是未绑定的方法, 都不要直接作为参数传给 Process 初始化的 target, 相反应该要用普通的函数代替
  • 子进程在访问全局变量时, 可能会与父进程的值不同。 ( 模块级别的常量没这问题 )
  • 开启新Python 解析器或者创建新 process 时, 确定主模块能够安全的导入。

而刚才的那个问题, 就是因为没有注意到第三点, 所以导致了意想不到的的副作用, 应该用下面的写法取代上面的不安全写法:

from multiprocessing import Process, freeze_support

def foo():
   print 'hello'

if __name__ == '__main__':
   freeze_support()
   p = Process(target=foo)
   p.start()

果然 Windows 无处不在都在挖坑....

作者:Lin_R
原文链接:httpt.cnR1Q19ML
Python: Windows下用 multiprocessing 的深坑

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python: Windows下用 mu

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python: Windows下用 mu

笔者某天在测试多进程时, 发现了一个问题测试代码:#coding: utf8from multiprocessing import Process import os print('Global_print', os.getpid())de
2023-01-31

如何使用Mu编辑器Python

本篇内容主要讲解“如何使用Mu编辑器Python”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Mu编辑器Python”吧!开始使用 Python 的 turtle 模块在 Linux 或
2023-06-16

Windows下用Python实现Web

今天想用python实现一个简单的WebService应用,从网上找了很多资料,却不能顺利配置工作环境,不过经过半天的努力,还是顺利解决各种Bug,记录一下。工作环境:Win7(64bit) + Python2.7.5(32bit) + E
2023-01-31

【python】windows下好用的的

PyScripter是一个使用Delphi开发的开源的Python集成开发环境(IDE),发布于MIT协议之下。[1]PyScripter支持Python2.4、2.5、2.6、2.7、3.0、3.1、3.2,而且可以根据需要切换。PySc
2023-01-31

windows下python proto

首先从google上下载protobuf-2.5.0.zip和protoc-2.5.0-win32.zip,然后把protoc-2.5.0-win32.zip里的protoc.exe放到protobuf-2.5.0\src\下。切换到pro
2023-01-31

使用Python在Windows下调用W

import os  import time   source='C:\\Linda\\Test\\Python\\source' target_dir='C:\\Linda\\Test\\Python\\backup\\'  target
2023-01-31

python学习-windows下使用p

有时候需要处理很多报表,将一个目录下的所有excel格式报表合并,手工操作费事费力如果能使用python,将多个.xlsx同时能够合并多个excel表的话,多么方便。1、windows上python配置windows上安装的是python2
2023-01-31

在Windows下,python-Lev

(1)首先下载python-Levenshtein 网址:https://pypi.python.org/pypi/python-Levenshtein/0.10.2 (2)在切换到第三方包所在目录下,执行pip setup.py inst
2023-01-31

windows下如何用python控制打

参考网址 首先下载python需要的库pip install pypiwin32简单例子import tempfileimport win32apiimport win32printfilename = tempfile.mktemp ("
2023-01-31

windows下使用python进行串口

Windows版本下的python并没有内置串口通讯的pyserial的库,所以需要自己下载。参照了网上的教程,有许多用的pip的安装方式,但是试了几个都没有用,所以想到用GitHub下载库文件,步骤分为:1.在Github下载python
2023-01-31

Windows下Python安装lxml

推荐安装方式:命令行安装pip install lxml==3.4.4easy_install lxml==3.4.4会自动下载lxml-3.4.4-cp27-none-win32.whl安装cp27表示是python2.7不指定版本号的话
2023-01-31

python: 监控windows 下进

目的:针对Windows下进程异常退出后,此程序自动启动被监控进程。如:监控Serv-U.exe程序是使用python语言编写,可在Windows下双击MonitorWin32Process.exe直接运行。程序会按照config.ini配
2023-01-31

windows下python 安装mys

首先查找过一些资料,选定mysql-python 来用做python访问mysql的支持库。开始用pip安装,失败了。后来通过安装windows的安装包,解决。血的教训:切记大写“import MySQLdb”exe下载地址:http://
2023-01-31

Windows下,VIM调试python

作者:半瓶墨水 链接:http://www.2maomao.com/blog/win32-vim-debug-python/vim很好用,但是python的set_trace太难用了,参考这篇文章,自己搞了一下。现在Ctrl+M插入set_
2023-01-31

Python【0】:windows环境下

首先·····Python是一门解释性语言,这是他的特点,这让Python似乎与“高效”无缘。然而你知道吗,著名的Instagram服务器就是是用Python+Django搭建的,而且月活用户超过7亿。要知道Python+Django是一个
2023-01-31

Windows下安装Python SSH

OpenSSH下载网址:http://sourceforge.net/projects/sshwindows/,下载安装即可。Pycrypto模块下载地址:http://pypi.python.org/pypi/pycrypto/,下载安装
2023-01-31

Python在windows下安装

1. 用浏览器打开 http://notepad-plus-plus.org/ 下载并安装 Notepad++ 文本编辑器。这个操作无需管理员权限。2. 把 Notepad++ 放到桌面或者快速启动栏,这样你就可以方便地访问到该程序了。这两
2023-01-31

Windows 下后台运行 Python

【code】#encoding: utf-8#author: walker#date: 2019-05-24#summary: 简单的 http server,用于测试后台运行import http.serverimport sockets
2023-01-31

windows下python绿色安装

一、绿色安装从官方下载msi安装包文件,第一次安装时,在提示安装路径的时候选D:\Python27,在提示是否为当前用户安装还是所有用户安装时,选只有当前用户使用。于是Python的所有资源就都在D:\Python27文件夹下了。只要保存这
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录