Многопроцессорность Python вызывает ошибку подтверждения при передаче больших данных в подпроцессPython

Программы на Python
Ответить
Anonymous
 Многопроцессорность Python вызывает ошибку подтверждения при передаче больших данных в подпроцесс

Сообщение Anonymous »

Как описано, я не могу передать большой кадр данных в подпроцесс при использовании многопроцессорной обработки стандартной библиотеки Python или библиотеки concurrent.futures.
Версия Python: 3.11. 8
система: windows 11 23H2
Ошибка: утвердить лево > 0. Ошибка ОС: неверный параметр.
Вот пример код:

Код: Выделить всё

import pandas as pd
import numpy as np

def calc_sth(big_df):
result = [1]
print("start subprocess")
return result

def multi_call():
big_df = pd.DataFrame(np.random.rand(1000000,1000))
result_list = []
with ProcessPoolExecutor() as executor:
with tqdm(total=10) as pbar:
for i in range(5):
future = executor.submit(calc_sth, big_df)
future.add_done_callback(lambda p: pbar.update(1))
result_list.append(future)

res = []
for r in result_list:
res.append(r.result())
return res

if __name__ == '__main__':
res = multi_call()
print(res)
а вот ошибка и обратная трассировка:

Код: Выделить всё

Traceback (most recent call last):
Traceback (most recent call last):
File "d:\python\Lib\multiprocessing\queues.py", line 246, in _feed
send_bytes(obj)
File "d:\python\Lib\multiprocessing\connection.py", line 200, in send_bytes
self._send_bytes(m[offset:offset + size])
File "d:\python\Lib\multiprocessing\connection.py", line 289, in _send_bytes
ov, err = _winapi.WriteFile(self._handle, buf, overlapped=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [WinError 87] 参数错误。
File "d:\python\Lib\multiprocessing\process.py", line 314, in _bootstrap
self.run()
File "d:\python\Lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "d:\python\Lib\concurrent\futures\process.py", line 249, in _process_worker
call_item = call_queue.get(block=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "d:\python\Lib\multiprocessing\queues.py", line 103, in get
res = self._recv_bytes()
^^^^^^^^^^^^^^^^^^
File "d:\python\Lib\multiprocessing\connection.py", line 216, in recv_bytes
buf = self._recv_bytes(maxlength)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "d:\python\Lib\multiprocessing\connection.py", line 334, in _recv_bytes
return self._get_more_data(ov, maxsize)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "d:\python\Lib\multiprocessing\connection.py", line 353, in _get_more_data
assert left > 0
^^^^^^^^
AssertionError
10%|████████████████████▊                                                                                                                                                                                           | 1/10 [00:06

Подробнее здесь: [url]https://stackoverflow.com/questions/79209823/python-multiprocessing-raise-assert-error-when-passing-large-data-into-the-subpr[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»