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多进程相关的坑相关推荐

  1. python多线程多进程多协程_python 多进程、多线程、协程

    1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...

  2. python3多进程写时拷贝_python多进程实现复制文件

    [Python] 纯文本查看 复制代码''' 多进程实现复制文件 步骤: (1)获得源文件夹路径: (2)获取源文件夹下各文件的文件名 (3)获得目标文件夹 (4)复制文件(文件夹不能复制) 新增内容 ...

  3. python多进程读同一个文件_python 多进程读写文件

    import time from multiprocessing import Process, JoinableQueue, cpu_count import csv ####处理一条数据的方法 d ...

  4. python开多少进程合适_python多进程基础

    python中的多进程编程方式和多线程非常相似,几乎可以说只是换了一些函数,有了之前讲过的多线程基础,很多地方我就只展示一些代码,在涉及到差别的地方再着重说明. 本文分为如下几个部分事先说明 最简单的 ...

  5. python进程池调用实例方法_Python 多进程并发操作中进程池Pool的实例

    在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.当被操作对象数目不大时,可以直接利用multiprocessing中的Process ...

  6. python多进程爬虫保存数据_Python多进程爬虫东方财富盘口异动数据+Python读写Mysql与Pandas读写Mysql效率对比...

    先上个图看下网页版数据.mysql结构化数据 通过Python读写mysql执行时间为:1477s,而通过Pandas读写mysql执行时间为:47s,方法2速度几乎是方法1的30倍.在于IO读写上, ...

  7. python多进程运行死机_python多进程假死

    结论:python多进程间用Queue通信时,如果子进程操作Queue满了或者内容比较大的情况下,该子进程会阻塞等待取走Queue内容(如果Queue数据量比较少,不会等待),如果调用join,主进程 ...

  8. python 输出在固定位置_python多进程/线程抢占stdoutput总是在固定位置截断上个输出?...

    自己写的爬虫包里面有个简单的日志输出函数logging,没做任何线程安全方面的处理,其核心如下: log = "%s %s\t%s-%s\t%s | %s" % (time.str ...

  9. win python 判断 所有 子进程 结束_python 多进程如何终止或重启子进程?

    这里有个完整的实例 MD5值重复文件多进程检查工具 测试过程中经常发现MD5值相同的图片.之前没有用并发,检查过程经常需要一个小时,现在改成多进程.一般3分钟以内可以完成处理(48核). 此模式也是自 ...

最新文章

  1. 在进行商业运算时解决BigDecimal的精度丢失问题
  2. 获取App Store中App的ipa包
  3. 国内ITSM解决方案-UNIPER
  4. 区块链论文9 FlyClient-加密货币的超轻客户端
  5. 设计模式:解释器模式(Interpreter)
  6. go语言json字符串解析为结构体数组,结构体指针的数组
  7. 聊聊高并发(二十三)解析java.util.concurrent各个组件(五) 深入理解AQS(三)
  8. 北大师兄告诉你,怎样顺利完成自己的博士生涯
  9. SQL Server 2008等登录用户只能看到自己的数据库设置办法
  10. NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver.
  11. Ubuntu源码安装php-7.2.23
  12. [试题]Python大赛部分答案
  13. python 卡方分布值_数据分析|抽样分布
  14. 苹果官方mfi认证名单_【大型推销配件现场】苹果回应iPhone12消磁,这波操作太6了 - 社会...
  15. 这批机器学习工具资源,够你用到长胡子了
  16. NMAKE参考之二——运行NMAKE
  17. js pug 代码_jquery.form.js的使用(基于pug)
  18. 稳定排序与不稳定排序方法
  19. Oracle APEX初体验
  20. 可视化编排为什么越来越流行

热门文章

  1. vue v2.5.0源码-初始化流程
  2. SQL Server 审计功能-记录所有的操作记录
  3. 12C 新特性--全库缓存
  4. Android:如何从堆栈中还原ProGuard混淆后的代码
  5. Linux各发行版本 优缺点 简介
  6. Go http访问使用代理
  7. pwnable.tw startorw
  8. 【ZOJ3899】State Reversing 解题报告
  9. StringBuffer和String,StringBuilder的区别?
  10. 随机获取一个集合(List, Set,Map)中的元素转