D45" /> D45" /> D45"/>

Error when using multiprocessing and realsense

43 views Asked by At

When using multiprocessing, it gives an error:

Traceback (most recent call last):
  File "P:\Python Project\Camera\example.py", line 75, in <module>
    D455_proc.start()
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\multiprocessing\process.py", line 121, in start
    self._popen = self._Popen(self)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\multiprocessing\context.py", line 336, in _Popen
    return Popen(process_obj)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
    reduction.dump(process_obj, to_child)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
TypeError: cannot pickle 'pyrealsense2.pyrealsense2.device' object
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py", line 126, in _main
    self = reduction.pickle.load(from_parent)
EOFError: Ran out of input

What could be the reason?

from Camera import Camera, CameraRS # Self-written libraries
from multiprocessing import Barrier, Process

if __name__ == "__main__":

    D455 = CameraRS(device_id=0, mode="stream")

    barrier = Barrier(1)
    
    args_d455 = {
        "color_profile": 96,
        "depth_profile": 226,
        "show_gui_color": True,
        "show_gui_depth": False,
        "img_count": 3,
        "time_out": 3,
        "barrier": barrier,
    }

    D455_proc = Process(target=D455.stream, kwargs=args_d455, 
                        name=f"{D455.get_device_name()} #{D455.get_serial_number}")
    
    D455_proc.start()

When running the code on Linux, everything works fine. But when used on Windows nothing works.

0

There are 0 answers