как использовать вектор в файле cython pxd? [Дубликат]

В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок.

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

7
задан uday 27 March 2015 в 23:26
поделиться

2 ответа

import numpy в Cython совпадает с Python, но cimport numpy сообщает Cython загрузить файл объявления:

https://github.com/cython/cython/blob/ master / Cython / Includes / numpy / init.pxd

, где объявляет все функции, константы и типы C-API, а также включает файлы заголовков, такие как numpy/arrayobject.h.

Если вы объявите переменную с np.ndarray[...], Cython будет знать, как преобразовать доступ к элементу массива в код c, который намного быстрее, чем оператор [] Python.

Вам нужно сообщить c, где находятся файлы заголовков numpy в setup.py, поэтому вы вызываете numpy.get_include(), чтобы получить путь.

11
ответ дан HYRY 27 August 2018 в 10:20
поделиться

Cython может скомпилировать нормальный код python, поэтому ваш первый компилируется.

Вообще говоря, чем больше типов вы укажете на cython, тем больше шансов, что вы получите лучшую производительность. Это ваше решение, если вы хотите торговать гибкостью для скорости.

Запустите cython -a your_test.pyx, чтобы просмотреть аннотированную версию того, как cython будет компилировать ваш код. Желтый означает, что ваш код преобразуется в много кода C (что примерно подразумевает снижение производительности), в то время как белый означает, что он преобразуется только в несколько строк C.

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

1
ответ дан colinfang 27 August 2018 в 10:20
поделиться
Другие вопросы по тегам:

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