Как создать неблокирующий именованный канал из Python? - PullRequest
0 голосов
/ 26 апреля 2018

Под Windows 7 у меня есть приложение Python 3, которое связывается по именованному каналу с исполняемым файлом, написанным на C с использованием Visual Studio. В Python я использую пакет win32pipe.

Я наблюдаю, что в исполняемом чтении из канала блокируется:

readResult = ReadFile(plafParams->hrpipe_p, &byte, 1, &dwBytesTransferred, &overlap);

Труба открывается с помощью:

...
...
overlap.hEvent = NULL;
overlap.Offset = 0;
overlap.OffsetHigh = 0;
overlap.Pointer = NULL;
...
...
plafParams->hwpipe_p = CreateFile(pipeName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, &overlap);

overlap является статической глобальной переменной и инициализируется, как указано выше.

OVERLAPPED overlap;

В Python канал открывается как:

self._rpipe = win32pipe.CreateNamedPipe(r'\\.\pipe\wskr_%s'%(self._comport,), win32pipe.PIPE_ACCESS_DUPLEX | win32file.FILE_FLAG_OVERLAPPED , 0, 1, 256, 256, 0, None)

После ожидания подключения к трубе я пишу в него как

win32file.WriteFile(self._rpipe, bytes)

Это работает, и я получаю отправленные байты в исполняемом файле без проблем, но я хотел бы получить неблокирующее чтение. Поэтому я открыл трубу с win32file.FILE_FLAG_OVERLAPPED, но это не помогает ...

Буду признателен за любую подсказку; -)

...