码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-05-29 16:22:08      阅读:1794      评论:0      收藏:0      [点我收藏+]

标签:

前言:

  在使用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

标签:

原文地址:http://www.cnblogs.com/junyuhuang/p/5539599.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!