【问题标题】:Python3: Shared Array with strings between processesPython3:进程之间带有字符串的共享数组
【发布时间】:2016-02-05 22:27:59
【问题描述】:

我想在进程之间共享一个包含字符串的列表,但不幸的是我收到错误消息“ValueError: character U+169ea10 is not in range [U+0000; U+10ffff]”。

这是 Python 3 代码:

from multiprocessing import Process, Array, Lock
from ctypes import c_wchar_p
import time

def run_child(a):
    time.sleep(2)
    print(a[0]) # print foo
    print(a[1]) # print bar
    print(a[2]) # print baz
    print("SET foofoo barbar bazbaz")
    a[0] = "foofoo"
    a[1] = "barbar"
    a[2] = "bazbaz"

lock = Lock()
a = Array(c_wchar_p, range(3), lock=lock)
p = Process(target=run_child, args=(a,))
p.start()

print("SET foo bar baz")
a[0] = "foo"
a[1] = "bar"
a[2] = "baz"

time.sleep(4)

print(a[0]) # print foofoo
print(a[1]) # print barbar
print(a[2]) # print bazbaz

有人知道我做错了什么吗?

问候 强尼

【问题讨论】:

  • 如果你正在处理 ctypes,你可以使用字节而不是字符串。

标签: python python-3.x multiprocessing


【解决方案1】:

您的 ctype 与您的 Array 的内容不匹配。您的初始化数据应该是与您指定的ctype 匹配的字符串列表。您正在使用 range(3) 对其进行初始化,其计算结果为整数,而不是字符串。

应该更像

a = Array(c_wchar_p, ('', '', ''), lock=lock)

来自docs

c_wchar_p

表示 C wchar_t * 数据类型,它必须是指向以零结尾的宽字符串的指针。构造函数接受整数地址或字符串。

【讨论】:

  • 非常感谢您的提示!
猜你喜欢
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
相关资源
最近更新 更多