Привет, у меня проблема с многопроцессорностью в Python 3.7
Я сделал слушатель, который должен ждать ответа от сервера, не блокируя остальную часть программы (асинхронная связь):
self = cl.appendSend('bar', base_list)
print("client erstellt neuen nebenläufigen listener, für die Antwort des Servers")
multiprocessing.set_start_method("spawn")
queue = multiprocessing.Queue()
process = multiprocessing.Process(target = cl.appendResponse(), args=(self))
process.start()
print("listener aktiv")
thread = threading.Thread(target= waitingPrinter(), args=(process, queue))
print(thread)
это где все запущено
но строка process = multiprocessing.Process(target = cl.appendResponse(), args=(self))
запускается один раз, проходит через нее, а затем, после завершения, просто запускается снова. Отладчик никогда не покидает эту строку.
Метод, запущенный в процессе:
def appendResponse(self):
print("nebenläufiger listener aktiv")
msgrcv = self.chan.receive_from(self.server)
print("nebenläufiger listener hat Antwort erhalten")
return msgrcv # pass it to caller
К сожалению, из-за авторского права я не могу больше публиковать, но метод работает нормально в первый раз и завершается ошибкой с сообщением:
Traceback (последний вызов был последним):
> File "D:/Verteile Systeme 2/neues Lab/git/vs2lab/lab2/rpc/runcl.py",
> line 27, in <module>
> process = multiprocessing.Process(target = cl.appendResponse(), args=(self)) File "C:\Program Files
> (x86)\Python37-32\lib\multiprocessing\process.py", line 82, in
> __init__
> self._args = tuple(args) TypeError: 'Client' object is not iterable
Так что мне интересно, почему процесс с cl.appendResponse()
даже запускается после привязки к процессу и не ждет process.start()
, и, если его еще нет в ответе, почему он запускается непосредственно секунду? время. И, конечно, как я могу это исправить.
Также есть ли способ заменить обработку потоком и получить возвращаемое значение?
У меня много проблем с обработкой и возвратом значений.