python多进程共享变量Value使用tips
2016-05-29 15:51
567 查看
前言:
在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料)。在根据网上资料使用Value时,由于共享的是字符串,但网上介绍的都是整数或者字符,于是遇到了很多阻碍,通过查询官方文档得出了解决方案。
一、Value的构造函数:
Value的初始化非常简单,直接类似Value('d', 0.0)即可,具体构造方法为:
该方法返回从共享内存中分配的一个
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类型可从下表查阅
在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料)。在根据网上资料使用Value时,由于共享的是字符串,但网上介绍的都是整数或者字符,于是遇到了很多阻碍,通过查询官方文档得出了解决方案。
一、Value的构造函数:
Value的初始化非常简单,直接类似Value('d', 0.0)即可,具体构造方法为:
multiprocessing.
Value(typecode_or_type, *args[, lock])。
该方法返回从共享内存中分配的一个
ctypes对象,其中typecode_or_type定义了返回的类型。它要么是一个ctypes类型,要么是一个代表ctypes类型的code。比如[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类型可从下表查阅
相关文章推荐
- 2.理解Tornado里的handler (副标题:URL控制的概念)
- sublime下运行python程序
- Python 一个妹子要求我重写[::-1]
- 深入浅析python继承问题
- Python 分析猴子吃桃子问题!
- 2.Supervisord进程管理工具的安装使用 (副标题:用supervisord管理Tornado进程)
- Python模块(一)
- python爬虫资料整理
- 4.Tornado源码必须要读的几个核心文件----了解Tornado的大致工作机制
- PyCUDA教程(二):教程
- PyCUDA教程(一):欢迎使用PyCUDA文档
- Python2和3差异与变通方法
- python 正则表达式
- Python实现在线上环境优雅的修改配置文件
- Python3 爬虫(四) -- 登录知乎
- python-生成随机字符
- 3.大概了解Tornado框架的设计模型
- 2.开始Tornado的源码分析之旅
- python导入不同目录下模块的方法
- 1.读懂tornado的预备知识:什么是epoll