Потерял ли Python ссылку в подпроцессе? - PullRequest
0 голосов
/ 08 октября 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : полностью нубский вопрос -.- '

Мне очень жаль, я уверен, что есть сообщения, которые уже отвечают на это, но я пробовал так много вещейдля моего проекта, и мой мозг сожжен ... Я не могу найти способ достичь того, что я хочу: (

Я написал простой пример того, что я сделал, с некоторыми комментариями того, что я понимаю:

#!/usr/bin/python3.7

class Example:
    obj = {"complex_object": None}

    def process_things():
        import multiprocessing
        p = multiprocessing.Process(target=self._huge_blocking_method,
                                    args=(q,
                                          self.obj,))
        # blocking method is started in a subprocess, so it's
        # non-blocking for the application
        p.start()
        # here the huge method is finished and subprocess is terminated
        # "q" can only handle simple things (string, etc.) not complex object
        result = q.get()
        # self.obj['complex_object'] is empty

    def _huge_blocking_method(self, q, obj):
        from anywhere import heavy_treatment
        # heavy_treatment () return a complex class instance
        obj["complex_object"] = heavy_treatment.get_result()
        # I cannot put heavy_treatement result in "q"
        q.put("done")

Есть ли способ выполнить мое тяжелое лечение в подпроцессе, не блокируя мое приложение ", и получить сложный результат в основном процессе"?

Я уже пытался использоватьпоток, а не процесс, объект «разделяемый», потому что он запускается в том же «слоте» памяти (не имеет хорошей формулировки), но основное приложение блокируется, потому что тяжелая обработка действительно толстая и полная блокировка ...

Благодаря сообществу Python, если вы можете поддержать новичка: x

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...