私は Python 3.8 を使用しており、アップグレードできません (Python 3.8 でのみ機能する依存関係があります)。そのため、この SO 投稿は私の質問には答えません。OSError: handle is closed
エラーを防ぐにはどうすればよいですか? これは、メイン スレッドに結果を返すときに発生します。これは非常に簡単な例です:
from concurrent.futures import ProcessPoolExecutor
def my_func(num):
return num + 1
def worker(data):
with ProcessPoolExecutor(5) as executor:
result = executor.map(my_func, data)
return result
if __name__ == "__main__":
arr = [1, 2, 3, 4, 5]
print(arr)
arr = worker(arr)
print(tuple(arr))
これは与える
[1, 2, 3, 4, 5]
(2, 3, 4, 5, 6)
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "C:\Users\hendra11\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\process.py", line 102, in _python_exit
thread_wakeup.wakeup()
File "C:\Users\hendra11\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\process.py", line 90, in wakeup
self._writer.send_bytes(b"")
File "C:\Users\hendra11\AppData\Local\Programs\Python\Python38\lib\multiprocessing\connection.py", line 183, in send_bytes
self._check_closed()
File "C:\Users\hendra11\AppData\Local\Programs\Python\Python38\lib\multiprocessing\connection.py", line 136, in _check_closed
raise OSError("handle is closed")
OSError: handle is closed
このバグの原因と、手動で修正する方法を知っている人はいますか?
問題があれば、私は Windows 10 で Visual Studio Code を実行しています。
更新:このエラーは、使用すると消えますがThreadPoolExecutor
、はるかに高速ですが、理由はわかりません。