Errno 22 Неверный аргумент: свалка укропа - PullRequest
0 голосов
/ 22 сентября 2018

Я немного волнуюсь.Последние два часа я пытаюсь сбросить, а затем загрузить объект Popen, используя укроп без малейшей удачи.Я получаю хорошо известную OSError: [Errno 22] Исключение из-за недопустимого аргумента, но действительно забавная вещь ... это 363 байта довольно далеко от 4ГБ.Ниже приведен пример минимальный :

import os
import dill
import struct
import subprocess
import collections
import multiprocessing


r, w = os.pipe()


def launcher(application):
    os.close(r)
    process = subprocess.Popen(application, shell=False)
    with os.fdopen(w, 'wb') as ser:
        dill.dump(process, ser, protocol=dill.HIGHEST_PROTOCOL, byref=True, recurse=True)


def launch(program, *args, **kwargs):
    os.close(w)

    application = [program] + list(args)
    process = multiprocessing.Process(target=launcher, args=(application, ))
    process.start()
    process.join()

    with os.fdopen(r, 'rb') as ser:
        application_process = dill.load(ser)

    process_pid = application_process.pid
    process_handle = application_process.process_handle

    print("PID: {pid}".format(pid=process_pid))
    process_handle.wait(timeout=15)
    print("Exited: {ec}.".format(ec=process_handle.returncode))


if __name__ == '__main__':
    program = ['ping']
    launch(program, '127.0.0.1', '-n', '10')

Давайте не будем вдаваться в подробности, почему я делаю что-то подобное, и сконцентрируемся на том, почему это происходит?

Process Process-1:
Traceback (most recent call last):
  File "C:\Users\xyz\AppData\Local\Programs\Python\Python34-32\lib\multiprocessing\process.py", line 297, in _bootstrap
    self.run()
  File "C:\Users\xyz\AppData\Local\Programs\Python\Python34-32\lib\multiprocessing\process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\xyz\PycharmProjects\Test\main\Main.py", line 16, in launcher
    dill.dump(process, ser, protocol=dill.HIGHEST_PROTOCOL, byref=True, recurse=True)
OSError: [Errno 22] Invalid argument

Traceback (most recent call last):
  File "C:/Users/xyz/PycharmProjects/Test/main/Main.py", line 40, in <module>
    launch(program, '127.0.0.1', '-n', '10')
  File "C:/Users/xyz/PycharmProjects/Test/main/Main.py", line 28, in launch
    application_process = dill.load(ser)
  File "C:\Users\xyz\PycharmProjects\Test\venv\lib\site-packages\dill\_dill.py", line 304, in load
    obj = pik.load()
EOFError: Ran out of input

Процесс завершен с кодом выхода 1

...