我开始学习multiprocessinginpython并且我注意到在主进程上执行相同的代码比在使用multiprocessing模块创建的进程中执行得快得多。
这是我的代码的简化示例,其中我首先执行代码main process并打印前 10 个计算的时间和总计算的时间。然后执行相同的代码new process(这是一个长时间运行的进程,我可以随时发送new_pattern)。
import multiprocessing
import random
import time
old_patterns = [[random.uniform(-1, 1) for _ in range(0, 10)] for _ in range(0, 2000)]
new_patterns = [[random.uniform(-1, 1) for _ in range(0, 10)] for _ in range(0, 100)]
new_pattern_for_processing = multiprocessing.Array('d', 10)
there_is_new_pattern = multiprocessing.Value('i', 0)
queue = multiprocessing.Queue()
def iterate_and_add(old_patterns, new_pattern):
for each_pattern in old_patterns:
sum = 0
for count in range(0, 10):
sum += …Run Code Online (Sandbox Code Playgroud) python parallel-processing multiprocessing long-running-processes
我有这个FormGroup
defaultIdNumberValidator = [Validators.required, Validators.minLength(6),
Validators.maxLength(11)];
this.registerForm = this.formBuilder.group({
permissions: this.formBuilder.group({
country: ['', [Validators.required]],
identityNumber: [null, this.defaultIdNumberValidator],
}, {validator: [this.validateId]})
});
Run Code Online (Sandbox Code Playgroud)
我想identityNumber根据this.validateId方法中的某些条件清除并添加验证器。
validateId(input: AbstractControl) {
if(condition) {
input.get("identityNumber").clearValidators(); //this is working
}
if(condition) {
input.get("identityNumber").setValidators(this.defaultIdNumberValidator); //not working
}
}
Run Code Online (Sandbox Code Playgroud)
当setValidators方法被调用时,我得到这个错误(行:109是setValidators被调用的行)
ERROR TypeError: Cannot read property 'defaultIdNumberValidator' of undefined
at RegisterComponent.validateId (register.component.ts:109)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742)
at eval (forms.js:694)
at eval (forms.js:742)
at Array.map (<anonymous>)
at _executeValidators (forms.js:742) …Run Code Online (Sandbox Code Playgroud) 例如,我有这个代码,它word用minlength6 个字符的验证器初始化。然后当长度word大于 4 时minlength设置为 8 个字符。
问题是,当您输入第五个字符时,更改不会立即可见,但在您输入第六个字符或删除一个或多个字符后,更改是可见的。
this.registerForm = this.formBuilder.group({
word: [null, [Validators.required, Validators.minLength(6)]
}, {validator: this.validateNumber});
validateNumber(input: AbstractControl) {
if(input.get("word").value != null && input.get("word").value.length > 4) {
input.get("word").setValidators([Validators.required, Validators.minLength(8)]);
}
}
Run Code Online (Sandbox Code Playgroud)
我在plunker上创建了这个例子。当您开始在输入框中输入时,会出现 错误minlength,当您输入第六个字符而不是第五个字符时,它会从 6 变为 8。