Я подаю заявку, которая анализирует одну или несколько серий данных с помощью нескольких различных алгоритмов (агенты). Я пришел к идее, что каждый из этих агентов мог быть реализован как отдельные скрипты Python, которые я запускаю использование или API Python C или Повышение. Python в моем приложении.
Я немного волнуюсь по поводу служебного TBH во время выполнения, поскольку я делаю некоторую довольно усиленную обработку данных, и я не хочу должным быть ожидать несколько минут каждого моделирования. Я буду обычно делать сотни тысяч, если не миллионы, повторений, в которых я вызываю внешние "агенты"; я имею лучше просто жесткое кодирование все в приложении, или производительность отбросит быть терпимой?
Кроме того, есть ли какие-либо другие интерпретируемые языки, которые я могу использовать кроме Python?
Да, тонн. Lua и Python кажется самым популярным:
встраивает Lua
Встраивание Python
Встраивание Tcl
Встраивание Ruby
встроить Perl
встроить JavaScript
Есть десятки двигателей JavaScript, это просто пример. Некоторые из них также пугают быстро.
Можно ли переопределить COM-интерфейс с 3-ьей вечеринки и использовать его с moq.
Кажется, что вы намереваетесь удалить внешнюю зависимость, и moq не играет хорошо с COMInterop сборкой, вы должны иметь возможность открыть рефлектор и вытащить любые определения интерфейсов, которые вы хотите из interop сборки, определить макет и запустить ваши модульные тесты
-121--3909843-Можно рассмотреть возможность установки подключаемого модуля LargeFile . Он отключает несколько функций, влияющих на производительность.
-121--2938676-Для миллионов звонков (от я предполагаю C ++, потому что вы упомянули Boost) в Python, да: вы заметите попадание производительности. Это может или не может быть значительным - возможно, усиление скорости опробования новых «агентов» будет больше, чем удар. У Python есть быстрые численные библиотеки (такие как Numpy), которые могут помочь, но вы все равно понесли накладные расходы на маршаллинг данных, призывая к Python, Gil и т. Д.
Да, вы можете встроить много других языков: проверить LUA Отказ Также проверьте SWIG.ORG, который может подключиться к многим другим языкам, кроме Python.
Очень хороший раствор Bradhouse. Есть ли способ применить аннотацию @matches до более чем одного поля?
Редактировать: Вот решение, которое я придумал, чтобы ответить на этот вопрос, я изменил ограничение, чтобы принять массив вместо одного значения:
@Matches(fields={"password", "email"}, verifyFields={"confirmPassword", "confirmEmail"})
public class UserRegistrationForm {
@NotNull
@Size(min=8, max=25)
private String password;
@NotNull
@Size(min=8, max=25)
private String confirmPassword;
@NotNull
@Email
private String email;
@NotNull
@Email
private String confirmEmail;
}
код для аннотации:
package springapp.util.constraints;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = MatchesValidator.class)
@Documented
public @interface Matches {
String message() default "{springapp.util.constraints.matches}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] fields();
String[] verifyFields();
}
и реализация:
package springapp.util.constraints;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.beanutils.BeanUtils;
public class MatchesValidator implements ConstraintValidator<Matches, Object> {
private String[] fields;
private String[] verifyFields;
public void initialize(Matches constraintAnnotation) {
fields = constraintAnnotation.fields();
verifyFields = constraintAnnotation.verifyFields();
}
public boolean isValid(Object value, ConstraintValidatorContext context) {
boolean matches = true;
for (int i=0; i<fields.length; i++) {
Object fieldObj, verifyFieldObj;
try {
fieldObj = BeanUtils.getProperty(value, fields[i]);
verifyFieldObj = BeanUtils.getProperty(value, verifyFields[i]);
} catch (Exception e) {
//ignore
continue;
}
boolean neitherSet = (fieldObj == null) && (verifyFieldObj == null);
if (neitherSet) {
continue;
}
boolean tempMatches = (fieldObj != null) && fieldObj.equals(verifyFieldObj);
if (!tempMatches) {
addConstraintViolation(context, fields[i]+ " fields do not match", verifyFields[i]);
}
matches = matches?tempMatches:matches;
}
return matches;
}
private void addConstraintViolation(ConstraintValidatorContext context, String message, String field) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(message).addNode(field).addConstraintViolation();
}
}
-121--589526- Вы, вероятно, можете создать встроенный язык с использованием шаблонов C ++ и перегрузка оператора, см. Например, например, языки Matrix UBLAS или FTENSOR. Я не думаю, что Python или другие интерпретированные языки подходят для отмены обработки / обработки данных.
Ваш первый подход Чтобы удалить SDTRUN и добавление нового, очевидно, удалит форматирование, поскольку вы добавляете только бега, но не RunStyle. Чтобы сохранить форматирование, вы должны создавать элементы запуска, такие как
new Run( new RunProperties(new RunStyle(){ Val = "MyStyle" }),
new Text("Replacement Text"));
Ваш второй подход к замене всех , заменители
будут работать на элемент управления контентом простого текста, только потому, что богатый контроль контента текста не имеет элемента SDTRUN. Богатый контроль контента текста - SDTBLOCK с элементами SDTContent. Богатый контроль контента текста может иметь несколько абзацев, несколько прогонов и несколько текстов. Таким образом, ваш код sdtrun.descendants
, будет поврежден для богатого элемента управления контентом текста. Нет ни одного строкового кода для замены всего текста богатого контроля контента и еще сохраняет все форматирование.
Я не понял, что вы подразумеваете под «его не избавляются от контроля контента в окончательном документе»? Я думал, что ваше требование здесь состоит в том, чтобы изменить текст (контент) только путем сохранения контроля контента и форматирования.
-121--3879846-Я обычно буду принимать сотни тысяч, если не миллионы, итерации, в которых я вызываю внешние «агенты»
, капля производительности будет заметным, возможно, болезненным. Если вы можете поместить данные в массивы и обработать его в партиях, используя Numpy , он должен быть намного быстрее.
Numpy делает его супер легко сделать какой-либо арифметик в миллион раз подряд. Например, в квадрате каждого элемента массива это похоже на следующее:
>>> x = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> x**2
array([1, 4, 9, 16, 25, 36, 49])
Super Easy, а узкая внутренняя петля здесь фактически реализована в C.
, конечно, Numpy может также сделать более продвинутый номер.