LINUX.ORG.RU

python3 grpc

 , ,


0

1

Имеется gRPC сервер с методами:

rpc monitoring (google.protobuf.Empty) returns (stream Status);
rpc getData (DataId) returns (stream Data);
Метод getData в потоке отдает данные, а monitiring позволяет следить за процессом передачи данных.

Пишу на Python клиента, в частности использующего эти процедуры. По аналогии с рабочим сишным кодом реализовал следующий алгоритм. Запустил поток забора данных с процедурой getData(), а затем в основном потоке запустил мониторинг:

with grpc.insecure_channel('localhost:50051') as channel:
    stub = data_service_pb2_grpc.DataServiceStub(channel)
    def upload(dataId):
        DataId = {'dataId': dataId}
        input_stream = stub.getData(data_service_pb2.DataId(**DataId))
         while True:
            element = next(input_stream)
            # ...
            if # ЗдесьУсловиеОкончанияПотока:
                break
            time.sleep(1)
            
    thread = Thread(target=upload, args=(newId,))
    thread.start()

    status_stream = stub.monitoring(empty_pb2.Empty())
    while True:
        status = next(status_stream)
        print(status) # вот здесь ПУСТО, но сервер точно передает статусы
        time.sleep(1)

При этом данные есть, а мониторинг возращает пустое значение. Как исправить ситуацию и заставить мониторинг monitoring читать данные? Да, что интересно. Если прервать работу скрипта и перезапустить, то данные не читаются (stub.getData) а статусы из мониторинга (stub.monitoring) читаются. Спасибо!



Последнее исправление: scientistpython (всего исправлений: 3)

Я не настоящий сварщик, но какого ты тред для функции объявил внутри этой самой функции. да и дальше как-то непонятно что с разметкой

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

в простейшем случае очередей и событий за глаза

Morin ★★★★
()
Ответ на: комментарий от Morin

это просто при копировании форматирование потерял

подправил

scientistpython
() автор топика
        status = next(paymentStream)

Это опечатка, или чтение действительно происходит не из status_stream, объявленного выше?

grazor ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.