python多进程用不了_Python多进程相关的坑
Python的multiprocessing模块实现了多进程功能,但官方文档上只有一些比较简单的用法,主要是使用函数作为process的target,而如何在class中使用多进程并没有多讲解。google出两篇比较详细的文章,建议从它们入门:
下面记录一下自己这周在python多进程上碰到的坑:
创建进程时,参数必须能够被pickle,所以有些自定义的类对象实例是不能被作为参数的
和threading不同,multiprocessing Process参数必须能够被pickle进行序列化
Python 2.7,Can’t pickle
python 2.7 的 python 3.5版本中,multiprocessing的行为是不同的,有些代码可以在3.5中运行,在2.7中却运行出错
例如上,在3.5中可以运行,这是因为在3.5版本中,pick可以序列化更多的类型。
尽量避免类实例中包含multiprocess.Manager实例,否则会有
TypeError: Pickling an AuthenticationString object is disallowed for security reasons
或者:
_pickle.PicklingError: Can't pickle : attribute lookup weakref on builtins failed
进程间共享的对象,使用Manager进行管理
Manager会生成一个进程,所以不同进程间访问统一变量,是通过IPC进行的,会有性能上的开销。
关于主进程所在的文件代码
使用multiprocessing时,主模块会被import到各进程中,所以创建子进程的部分,必须使用
if __name__ == '__main__:
进行保护,否则会有runtime error,或者递归创建子进程
Update 1 (2018-11-08):
在Windows环境中,jupyter-notebook中,即使使用if __name__ == '__main__进行保护,也会出现runtime error,这个时候可以将jupyter中的代码下载成py脚本,直接运行脚本。
作为对比,Linux下运行的jupyter-notebook并不会。
python多进程用不了_Python多进程相关的坑相关推荐
- python多线程多进程多协程_python 多进程、多线程、协程
1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...
- python3多进程写时拷贝_python多进程实现复制文件
[Python] 纯文本查看 复制代码''' 多进程实现复制文件 步骤: (1)获得源文件夹路径: (2)获取源文件夹下各文件的文件名 (3)获得目标文件夹 (4)复制文件(文件夹不能复制) 新增内容 ...
- python多进程读同一个文件_python 多进程读写文件
import time from multiprocessing import Process, JoinableQueue, cpu_count import csv ####处理一条数据的方法 d ...
- python开多少进程合适_python多进程基础
python中的多进程编程方式和多线程非常相似,几乎可以说只是换了一些函数,有了之前讲过的多线程基础,很多地方我就只展示一些代码,在涉及到差别的地方再着重说明. 本文分为如下几个部分事先说明 最简单的 ...
- python进程池调用实例方法_Python 多进程并发操作中进程池Pool的实例
在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中的Process ...
- python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...
先上个图看下网页版数据.mysql结构化数据 通过Python读写mysql执行时间为:1477s,而通过Pandas读写mysql执行时间为:47s,方法2速度几乎是方法1的30倍.在于IO读写上, ...
- python多进程运行死机_python多进程假死
结论:python多进程间用Queue通信时,如果子进程操作Queue满了或者内容比较大的情况下,该子进程会阻塞等待取走Queue内容(如果Queue数据量比较少,不会等待),如果调用join,主进程 ...
- python 输出在固定位置_python多进程/线程抢占stdoutput总是在固定位置截断上个输出?...
自己写的爬虫包里面有个简单的日志输出函数logging,没做任何线程安全方面的处理,其核心如下: log = "%s %s\t%s-%s\t%s | %s" % (time.str ...
- win python 判断 所有 子进程 结束_python 多进程如何终止或重启子进程?
这里有个完整的实例 MD5值重复文件多进程检查工具 测试过程中经常发现MD5值相同的图片.之前没有用并发,检查过程经常需要一个小时,现在改成多进程.一般3分钟以内可以完成处理(48核). 此模式也是自 ...
最新文章
- 在进行商业运算时解决BigDecimal的精度丢失问题
- 获取App Store中App的ipa包
- 国内ITSM解决方案-UNIPER
- 区块链论文9 FlyClient-加密货币的超轻客户端
- 设计模式:解释器模式(Interpreter)
- go语言json字符串解析为结构体数组,结构体指针的数组
- 聊聊高并发(二十三)解析java.util.concurrent各个组件(五) 深入理解AQS(三)
- 北大师兄告诉你,怎样顺利完成自己的博士生涯
- SQL Server 2008等登录用户只能看到自己的数据库设置办法
- NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver.
- Ubuntu源码安装php-7.2.23
- [试题]Python大赛部分答案
- python 卡方分布值_数据分析|抽样分布
- 苹果官方mfi认证名单_【大型推销配件现场】苹果回应iPhone12消磁,这波操作太6了 - 社会...
- 这批机器学习工具资源,够你用到长胡子了
- NMAKE参考之二——运行NMAKE
- js pug 代码_jquery.form.js的使用(基于pug)
- 稳定排序与不稳定排序方法
- Oracle APEX初体验
- 可视化编排为什么越来越流行