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

yipeiwu_com5年前Python基础

前言:

在使用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设计】。

相关文章

使用Python压缩和解压缩zip文件的教程

python 的 zipfile 提供了非常便捷的方法来压缩和解压 zip 文件。 例如,在py脚本所在目录中,有如下文件: 复制代码 代码如下:readability/readabil...

Python中设置变量作为默认值时容易遇到的错误

思考一下下面的代码片段:   def foo(numbers=[]): numbers.append(9) print numbers 在这里,我们定义了一个...

python3+selenium自动化测试框架详解

python3+selenium自动化测试框架详解

背景 为了更好的发展自身的测试技能,应对测试行业以及互联网行业的迭代变化。自学python以及自动化测试。 虽然在2017年已经开始接触了selenium,期间是断断续续执行自动化测...

使用Python的Flask框架构建大型Web应用程序的结构示例

虽然小型web应用程序用单个脚本可以很方便,但这种方法却不能很好地扩展。随着应用变得复杂,在单个大的源文件中处理会变得问题重重。 与大多数其他web框架不同,Flask对大型项目没有特定...

Python制作Windows系统服务

最近有个Python程序需要安装并作为Windows系统服务来运行,过程中碰到一些坑,整理了一下。 Python服务类 首先Python程序需要调用一些Windows系统API才能作为系...