python多进程共享变量Value使用tips

Posted 转瞬之夏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python多进程共享变量Value使用tips相关的知识,希望对你有一定的参考价值。

前言:

  在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料)。在根据网上资料使用Value时,由于共享的是字符串,但网上介绍的都是整数或者字符,于是遇到了很多阻碍,通过查询官方文档得出了解决方案。

 

一、Value的构造函数:

  Value的初始化非常简单,直接类似Value(\'d\', 0.0)即可,具体构造方法为:

  multiprocessing.Value(typecode_or_type*args[, lock])。

  该方法返回从共享内存中分配的一个ctypes 对象,其中typecode_or_type定义了返回的类型。它要么是一个ctypes类型,要么是一个代表ctypes类型的code。比如c_bool和\'b\'是同样的,因为\'b\'是c_bool的code。

  ctypes是Python的一个外部函数库,它提供了和C语言兼任的数据类型,可以调用DLLs或者共享库的函数,能被用作在python中包裹这些库。

  *args是传递给ctypes的构造参数

 

二、Value的使用

  对于共享整数或者单个字符,初始化比较简单,参照下图映射关系即可。如i = Value(\'i\', 1), c = Value(\'c\', \'0\')。  

  注意,如果我们使用的code在上表不存在,则会抛出:

    size = ctypes.sizeof(type_)

  TypeError: this type has no size

 

   如果共享的是字符串,则在上表是找不到映射关系的,就是没有code可用。所以我们需要使用原始的ctype类型

  例如 

  from ctypes import c_char_p

  ss = Value(c_char_p, \'ss\')

  ctype类型可从下表查阅

  

 

  

以上是关于python多进程共享变量Value使用tips的主要内容,如果未能解决你的问题,请参考以下文章

python 多进程共享全局变量之Manager()

python学习笔记——多进程中共享内存Value & Array

python多处理中的共享变量

Python 多进程和多线程 的使用

Python多进程(multiprocessing)共享变量

Python多进程(multiprocessing)共享变量