簡體   English   中英

在 Python 中使用 multiprocessing.Array 時出現 OSError (Errno 9)

[英]OSError (Errno 9) when using multiprocessing.Array in Python

我正在嘗試在 Python 3.7.4 (macOS 10.14.6) 的兩個獨立進程中使用multiprocessing.Array 我首先使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM