В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:
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
}
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()
, чтобы получить путь.
Cython может скомпилировать нормальный код python, поэтому ваш первый компилируется.
Вообще говоря, чем больше типов вы укажете на cython, тем больше шансов, что вы получите лучшую производительность. Это ваше решение, если вы хотите торговать гибкостью для скорости.
Запустите cython -a your_test.pyx
, чтобы просмотреть аннотированную версию того, как cython будет компилировать ваш код. Желтый означает, что ваш код преобразуется в много кода C (что примерно подразумевает снижение производительности), в то время как белый означает, что он преобразуется только в несколько строк C.
Если вы не потратили время на запрос здесь , но вместо этого прочитайте руководство на официальном сайте, вы могли бы получить лучшее понимание уже.