python - 在 Python 中使用 multiprocessing.Array 时出现 OSError (Errno 9)
问题描述
我正在尝试multiprocessing.Array
在 Python 3.7.4(macOS 10.14.6)中的两个单独进程中使用 a 。我首先使用上下文创建一个新进程,并将一个对象spawn
作为参数传递给它:Array
import multiprocessing, time, ctypes
def fn(c):
time.sleep(1)
print("value:", c.value)
def main():
ctx = multiprocessing.get_context("spawn")
arr = multiprocessing.Array(ctypes.c_char, 32)
p = ctx.Process(target=fn, args=(arr,))
p.start()
arr.value = b"hello"
p.join()
if __name__ == "__main__":
main()
但是,当我尝试阅读它时,我收到以下错误:
Process SpawnProcess-1:
Traceback (most recent call last):
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
self.run()
File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/process.py", line 99, in run
self._target(*self._args, **self._kwargs)
File "/Users/federico/Workspace/test/test.py", line 6, in fn
print("value:", c.value)
File "<string>", line 3, in getvalue
OSError: [Errno 9] Bad file descriptor
然而,预期的输出是value: hello
。有人知道这里可能出了什么问题吗?谢谢。
解决方案
该数组还应该在您为多处理定义的上下文中定义,如下所示:
import multiprocessing, time
import ctypes
from multiprocessing import Process
def fn(arr):
time.sleep(1)
print("value:", arr.value)
def main():
ctx = multiprocessing.get_context("spawn")
arr = ctx.Array(ctypes.c_char, 32)
p = ctx.Process(target=fn, args=(arr,))
p.start()
arr.value = b'hello'
p.join()
if __name__ == "__main__":
main()
推荐阅读
- react-native - 反应式图像标签中的 TypeError
- java - 当列表和元素具有相同名称时解组列表
- django - 调用 apply_async 时,Celery 不会返回或失败。与 celery_beat 一起使用
- typescript - 我们如何在打字稿中获得嵌套对象类型
- sql - 检查域是否在 SQL Server 中设置了 mx 记录
- linux - 如何调整 /dev/shm 的大小?
- mysql - 带有内部连接的mysql查询中的if语句
- emacs - 是否可以让 emacs verilog-auto 连接在 AUTO_TEMPLATE 中模板化的电线
- applescript - 选择安全和隐私中的项目
- c++ - 如何在 C++ 中更改 LPCTSTR 对象?