zoukankan      html  css  js  c++  java
  • 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类型可从下表查阅

      

     

      

  • 相关阅读:
    WPF框架MVVM简单例子
    向WPF的Grid里面增加控件
    静态资源(StaticResource)和动态资源(DynamicResource)
    WPF中INotifyPropertyChanged用法与数据绑定
    wpf 绑定数据无法更新ui控件可能存在的问题
    C#调用Resources.resx资源文件中的资源
    C# 委托的理解
    Codeforces 524E Rooks and Rectangles 线段树
    Codeforces 1000F One Occurrence 主席树|| 离线+线段树
    GYM 101673 A
  • 原文地址:https://www.cnblogs.com/junyuhuang/p/5539599.html
Copyright © 2011-2022 走看看