Как использовать функцию 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, используя отрицательный дескриптор клиента.

Другие вопросы по тегам