ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : полностью нубский вопрос -.- '
Мне очень жаль, я уверен, что есть сообщения, которые уже отвечают на это, но я пробовал так много вещейдля моего проекта, и мой мозг сожжен ... Я не могу найти способ достичь того, что я хочу: (
Я написал простой пример того, что я сделал, с некоторыми комментариями того, что я понимаю:
#!/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