Как использовать функцию k() для получения данных в kdb/q
Используя интерфейс c.cs, который находится в Интерфейсе с C#, как мне использовать k()
функция для получения данных из длительных вычислений?
Что я хотел бы сделать, это
conn.ks("compute_long_running_function[]");
Сделать что-то еще
results=conn.k();//wait for data
Тем не менее, этот последний вызов не возвращает последний результат - он истекает неопределенно /T {N}
был установлен заранее.
Есть ли способ отправить данные с сервера клиенту, который его ждет? Как еще можно использовать k()
функция без аргументов.
Обратите внимание, что этот вопрос также относится к интерфейсу Java, который почти идентичен.
2 ответа
Функция k() будет блокироваться, пока не получит данные от удаленного сокета. Так что, если ваша функция выглядела так:
compute_long_running_function:{[] r:til 1000; neg[.z.w] r }
результат функции будет отправлен через петлевое соединение и получен conn.k()
Альтернатива - вы просто делаете:
results=conn.k("compute_long_running_function[]");
который вернет результаты функции, когда они будут готовы. Но вы, возможно, уже знали это.
С Уважением,
Дэвид
Если вы позвоните ks
возвращаемое значение вашей функции игнорируется, и вы не можете использовать k()
чтобы получить это.
Вы используете только k() для получения данных, которые явно отправлены вам q
обрабатывать способ, показанный @David, используя отрицательный дескриптор клиента.