我理解在MATLAB这样的语言中使用矢量化是如何通过消除维护循环变量的开销来加速代码的,但是矢量化实际上是如何在汇编/机器代码中进行的?我的意思是在某个地方仍然必须有一个循环,对吗?
我为我的OS类写了这个:
#include <iostream>
#include <fstream>
//encodes a file using the (8,4) Hamming Code.
//usage : HammingEncode.out < inputFile > outputFile
int main() {
unsigned char const codebook[] = {0x00, 0x1E, 0x2D, 0x33, 0x4B, 0x55, 0x66, 0x78, 0x87, 0x99, 0xAA, 0xB4, 0xCC, 0xD2, 0xE1, 0xFF};
unsigned char in, nextByte;
unsigned char const leftMask = 0xF0, rightMask = 0x0F;
in = std::cin.get();
while (!std::cin.eof()) {
nextByte = (in & leftMask) >> 4;
std::cout << codebook[nextByte];
nextByte = in & rightMask;
std::cout << …Run Code Online (Sandbox Code Playgroud) 我有几个类看起来或多或少是这样的:
import threading
import time
class Foo():
def __init__(self, interval, callbacks):
self.thread = threading.Thread(target=self.loop)
self.interval = interval
self.thread_stop = threading.Event()
self.callbacks = callbacks
def loop():
while not self.thread_stop.is_set():
#do some stuff...
for callback in self.callbacks():
callback()
time.sleep(self.interval)
def start(self):
self.thread.start()
def kill(self):
self.thread_stop.set()
Run Code Online (Sandbox Code Playgroud)
我在我的主线程中使用的是这样的:
interval = someinterval
callbacks = [some callbacks]
f = Foo(interval, callbacks)
try:
f.start()
except KeyboardInterrupt:
f.kill()
raise
Run Code Online (Sandbox Code Playgroud)
在所有回调完成后,但在循环重复之前,我想要一个 KeyboardInterrupt 来终止线程。目前它们被忽略,我不得不求助于终止程序运行的终端进程。
我从这篇文章中看到了使用 threading.Event 的想法,但看起来我做错了,这让这个项目的工作变得非常麻烦。
我不知道它是否相关,但是我从 Internet 传递访问数据的回调并大量使用重试装饰器来处理不可靠的连接。
编辑
在大家的帮助下,循环现在在 Foo 中看起来像这样:
def thread_loop(self):
while not …Run Code Online (Sandbox Code Playgroud) 我只是在学习生锈,正在开展一项简单的/ r/dailyprogrammer任务.这是一些代码:
type ToDoList = HashMap<String, bool>;
fn print(list: &ToDoList) {
let mut max_len: usize = 0;
for (item, _) in list.iter() {
max_len = max(max_len, item.len());
}
let end = format!("+---{}-+",
iter::repeat("-").take(max_len).collect::<String>());
println!("{}", end);
for (item, done) in list.iter() {
let line = format!("| {0} {1}{2} |",
if done {"?"} else {"?"},
item,
iter::repeat("-")
.take(max_len - item.len())
.collect::<String>()
);
println!("{:?}", (item, done));
}
println!("{}", end);
}
Run Code Online (Sandbox Code Playgroud)
我从rustc得到这个错误:
error: type mismatch resolving `<std::collections::hash::map::Iter<'_,
collections::string::String, bool> as core::iter::Iterator>::Item ==
(_, bool)`: …Run Code Online (Sandbox Code Playgroud)