Skip to content

TypeError: can't pickle weakref objects when running demo in Simulator mode #7

@Psychim

Description

@Psychim

Hi! I tried to run your demo in Simulator mode, but this error occurred after start.
Here is the traceback:

Traceback (most recent call last):  
  File "D:\ProgramData\Anaconda3\lib\site-packages\rtgraph\ui\mainWindow.py", line 62, in start  
    if self.worker.start():  
  File "D:\ProgramData\Anaconda3\lib\site-packages\rtgraph\core\worker.py", line 80, in start  
    self._acquisition_process.start()  
  File "D:\ProgramData\Anaconda3\lib\multiprocessing\process.py", line 112, in start  
    self._popen = self._Popen(self)  
  File "D:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 223, in _Popen  
    return _default_context.get_context().Process._Popen(process_obj)  
  File "D:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 322, in _Popen  
    return Popen(process_obj)  
  File "D:\ProgramData\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__  
    reduction.dump(process_obj, to_child)  
  File "D:\ProgramData\Anaconda3\lib\multiprocessing\reduction.py", line 60, in dump  
    ForkingPickler(file, protocol).dump(obj)  
TypeError: can't pickle weakref objects  
Traceback (most recent call last):  
  File "<string>", line 1, in <module>  
  File "D:\ProgramData\Anaconda3\lib\multiprocessing\spawn.py", line 105, in spawn_main  
    exitcode = _main(fd)  
  File "D:\ProgramData\Anaconda3\lib\multiprocessing\spawn.py", line 115, in _main  
    self = reduction.pickle.load(from_parent)  
EOFError: Ran out of input

I found out that this error occurred because self._parser_process.start() is called before self._acquisition_process.start()

And here is my simulated program where the same error occurs:

from multiprocessing import Process,Event
import time
class TestProcess(Process):
    def __init__(self):
        Process.__init__(self)
        self._exit=Event()
    def stop(self):
        self._exit.set()
    def run(self):
        while not self._exit.is_set():
            pass
class TestProcessB(TestProcess):
    def __init__(self,p):
        Process.__init__(self)
        self._test_process=p
    def run(self):
        while not self._exit.is_set():
            print(time.time())
            time.sleep(1)
if __name__=='__main__':
    tp=TestProcess()
    tpb=TestProcessB(tp)
    tp.start()
    tpb.start()
    time.sleep(10)
    tp.stop()
    tpb.stop()

How can this problem be fixed?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions