抱歉,我应该已经回答您其他问题了。您不能将普通multiprocessing.Lock对象传递给Pool方法,因为它们不能被腌制。有两种方法可以解决此问题。一种是创建Manager()并传递一个Manager.Lock():

def main():

iterable = [1, 2, 3, 4, 5]

pool = multiprocessing.Pool()

m = multiprocessing.Manager()

l = m.Lock()

func = partial(target, l)

pool.map(func, iterable)

pool.close()

pool.join()

不过,这有点重量级;使用Manager需要产生另一个进程来托管Manager服务器。并且所有对acquire/ release锁的调用都必须通过IPC发送到该服务器。

另一个选择是multiprocessing.Lock()使用initializerkwarg 在创建池时传递常规值。这将使您的锁实例在所有子工作者中都是全局的:

def target(iterable_item):

for item in items:

# Do cool stuff

if (... some condition here ...):

lock.acquire()

# Write to stdout or logfile, etc.

lock.release()

def init(l):

global lock

lock = l

def main():

iterable = [1, 2, 3, 4, 5]

l = multiprocessing.Lock()

pool = multiprocessing.Pool(initializer=init, initargs=(l,))

pool.map(target, iterable)

pool.close()

pool.join()

第二种解决方案具有不再需要的副作用partial。

python manager是进程安全的么_Python在进程之间共享锁相关推荐

  1. python的线程如何启用和结束_python线程进程

    操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各种其他输入 输出设备组成的复杂系统,每位程序员不可能掌握所有系统实现的细节 ...

  2. python 结束进程快捷键是什么_python结束进程的方式有什么

    python退出程序的方式 python程序退出方式[sys.exit() os._exit() os.kill() os.popen(...)] 1. sys.exit() 执行该语句会直接退出程序 ...

  3. python求1到100偶数和_python 求1-100之间的奇数或者偶数之和的实例

    python 求1-100之间的奇数或者偶数之和的实例 如下所示: i=0 sum1=0 sum2=0 while i<=100: if i%2==0: sum1+=i else: sum2+= ...

  4. python manager详解_Python通过Manager方式实现多个无关联进程共享数据

    Python官方文档 Python实现多进程间通信的方式有很多种,例如队列,管道等. 但是这些方式只适用于多个进程都是源于同一个父进程的情况. 如果多个进程不是源于同一个父进程,只能用共享内存,信号量 ...

  5. python进程池调用实例方法_Python进程池Pool应用实例分析

    本文实例讲述了Python进程池Pool应用.分享给大家供大家参考,具体如下: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百 ...

  6. python打开一个软件并进行操作_python程序中的进程操作

    之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程 ...

  7. python进程和线程是什么_python的进程与线程

    一.进程与线程的相关概念 1.什么是进程 进程是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序,数据集,进程控制块三部分组成. 2.什么是线程 线程也叫轻量级进程,它是一个基本的CPU执行 ...

  8. python的进程池map函数_python进程池map

    python进程池怎么实现 当进程池中任务队列非空时,才会触发worker进程去工作,那么如何向进程池中的任务队列中添加任务呢,进程池类有两组关键方法来创建任务,分别是apply/apply_asyn ...

  9. python多线程执行其他模块的文件_python并发编程--进程线程--其他模块-从菜鸟到老鸟(三)...

    concurrent模块 1.concurrent模块的介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 Proc ...

最新文章

  1. 太赞!639 页《深度学习:Deep Learning》硬核课程 PPT 下载
  2. 基因 ID 匹配利器
  3. 解决activiti中由模板转换的流程图连线名称缺失问题
  4. shell训练营Day31
  5. springboot项目自定义类在配置文件中的提示
  6. nginx配置前端反向代理
  7. quick time不可用是什么意思_fpga是什么意思(fpga怎么用)
  8. android暂停活动,如何将Android暂停活动带到前面
  9. acill排序 java_Map集合按照ASCII码从小到大(字典序)排序--JAVA
  10. keil5图标变成白色_平面设计:创建万圣节图标
  11. 六个细节改变提升 Android L 用户体验
  12. Vscode搭建jdk源码阅读环境 wsl
  13. webp格式以及工具介绍
  14. 【3D目标检测】PV-RCNN:Point-Voxel Feature Set Abstraction for 3D Object Detection
  15. Eclipse添加代码自动补全+对齐功能
  16. 一个k8s集群——跨云服务器部署
  17. 快速计算某一天是星期几-蔡勒公式
  18. 账号被罚了,申诉的结果出来了,果然
  19. (三)Animation创建动画
  20. JAVA基础(一)——什么是java

热门文章

  1. 深入浅出理解 Spark:环境部署与工作原理
  2. 大牛书单 | 系统架构方向好书推荐
  3. FFmpeg源代码学习
  4. Linux下 /dev/null 21 相关知识说明
  5. RTMPdump(libRTMP) 源代码分析 5: 建立一个流媒体连接 (NetConnection部分)
  6. kernel-devel
  7. Python异步编程Async/Await
  8. Spark _04集群搭建及测试
  9. 使用eclipse开发javaweb注册功能
  10. leetcode 1338. Reduce Array Size to The Half | 1338. 数组大小减半(Java)