千家信息网

python进程间共享数据的方法

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要讲解了"python进程间共享数据的方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python进程间共享数据的方法"吧!def wor
千家信息网最后更新 2026年11月04日python进程间共享数据的方法

这篇文章主要讲解了"python进程间共享数据的方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python进程间共享数据的方法"吧!

def worker(num, mystr, arr):    num.value *= 2    mystr.value = "ok"    for i in range(len(arr)):        arr[i] = arr[i] * (-1) + 1.5def dump_vars(num, mystr, arr):    print 'num: ', num.value    print 'str: ', mystr[:]    print 'arr: ', arr[:]if __name__=='__main__':    num = Value('i', 5)    mystr = Array('c', 'just for test')    arr = Array('d', [1.0, 1.5, -2.0])    dir(str)    print 'init value'    dump_vars(num, mystr, arr)    ps = [Process(target=worker, args=(num, mystr, arr)) for x in range(3)]    for p in ps:        p.start()    for p in ps:        p.join()    print    print 'after all workers finished'    dump_vars(num, mystr, arr)

上述代码打印结果:

注意看红色框住的内容,多次测试我发现,在共享字符串的时候,在主进程中的初始化决定了这个字符串的长度,

创建后字符串的长度固定不变,相当于把这个字符串所在的地址复制给一个指针,并且在字符串的首地址记录了自身的长度,

在以后读取这个值的时候就会去读取那一段固定长度的内容,而不管现在的新内容长度是多少,举个例子:

比如我们在主进程初始化一段字符串 "abcde",一旦初始化,长度就固定了,现在长度是5,然后我们在其他进程赋值,我们尝试赋值为

"abcdefg",此时执行会报错,因为长度超标了,我们在赋值为 "yes",最后输出结果为 "yes&efg"(此处的&是代表一个不可显示的字符,不同的环境下显示不同,有可能显示空格,有可能显示null)。也就是说长短都不行,必须和初始化字符串等长。

于是得出这样一个结论,如果你要共享一个字符串,那么在子进程中赋值时必须赋值长度相当的字符串。建议在子进程中可以先检查字符串长度,然后在根据需要拼接指定长度的字符串

上面的分析建立在下面的基础上,请先看下面的基本用法:

多进程间共享数据,可以使用 multiprocessing.Value 和 multiprocessing.Array

Value(typecode_or_type, *args[, lock])
Value函数返回一个shared memory包装类,其中包含一个ctypes对象
typecode_or_type typecode列表如下
------------------------------------------------------------------
Type code C Type Python Type
'c' char character
'b' signed char int
'B' unsigned char int
'u' Py_UNICODE Unicode character
'h' signed short int
'H' unsigned short int
'i' signed int int
'I' unsigned int long
'l' signed long int
'L' unsigned long long
'f' float float
'd' double float
---------------------------------------------------------
Array(typecode_or_type, size_or_initializer, *, lock=True)
lock 默认值是True:创建一个新的lock来控制对value的访问。该参数也可以是 multiprocessing.Lock 或 multiprocessing.RLock 对像,用来控制对value的访问

感谢各位的阅读,以上就是"python进程间共享数据的方法"的内容了,经过本文的学习后,相信大家对python进程间共享数据的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

字符 字符串 长度 进程 数据 方法 内容 面的 学习 不同 地址 时候 结果 控制 不行 也就是 也就是说 代码 代表 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司 科技创新与互联网经济 科技与互联网 智能科技公司是互联网公司吗 互联网科技的 互联网科技开发公司 为想互联网科技 互联网科技的未来发展 深圳艾佳互联网科技 互联网前沿科技 人人互联网科技是培训 成都玖崟互联网科技有限公司乐商圈怎么样 青岛中康互联网医疗科技有限公司 上海宁丞科技互联网 山东子淼互联网科技有限公司 富国互联网科技002692 卡尔迅互联网科技有限公司 神州科技互联网有限公司 湖北辰鑫科技互联网 北京品多多互联网科技有限公司 伟宏互联网科技 浩特互联网科技 湖南洣水互联网科技有限公司扣款 昭通云南众福互联网科技有限公司 佳云科技和互联网广告 互联网科技革命什么开始 广西互联网科技孵化中心 银川新华互联网科技学校联系电话 滨湖区互联网智能科技产品有哪些 云南省自由互联网科技有限公司
0