Как читать из os.pipe () без того, чтобы быть заблокированным?

Если я правильно читаю ваш код, импортируя ваши загрузчики, используя импорт с подстановочными символами, например:

import * as loaders from './loaders'

приводит к объекту, в котором каждое свойство является функцией, которая создает экземпляр определенного DataLoader. Так что нам просто нужно пройтись по каждому свойству. Например:

// Using forEach
const dataLoaders = {}
Object.keys(loaders).forEach(loaderName => {
  dataLoaders[loaderName] = loaders[loaderName]()
})

// Or using reduce
const dataLoaders = Object.keys(loaders).reduce((result, loaderName) => {
  result[loaderName] = loaders[loaderName]()
  return result
}, {})

Используя lodash , вы также можете просто сделать что-то вроде:

const dataLoaders = _.mapValues(loaders, loader => loader())

9
задан 2 revs, 2 users 67% 3 July 2014 в 01:47
поделиться

1 ответ

Вы могли бы попробовать это.

import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 

С этим thePipe.read() должен не блокироваться.

От канала (7) страница справочника:

Если процесс попытается читать из пустого канала, то считанный (2) заблокируется, пока данные не доступны. (...) Неблокирование ввода-вывода возможно при помощи fcntl (2) F_SETFL операция для включения O_NONBLOCK открытый флаг состояния файла.

15
ответ дан 4 December 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: