开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

夏谷涵/ScanNet

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
master
CameraParameterEstimation-Unix-build
master
分支 (2)
master
CameraParameterEstimation-Unix-build
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
master
CameraParameterEstimation-Unix-build
ScanNet
/
WebUI
/
src
/
taskqueue.js
ScanNet
/
WebUI
/
src
/
taskqueue.js
taskqueue.js 5.54 KB
一键复制 编辑 原始数据 按行查看 历史
Manolis Savva 提交于 2018年01月12日 11:02 +08:00 . add WebUI code
const fs = require('fs');
var BasicQueue = require('better-queue');
var MemoryStore = require('better-queue-memory');
var SqlStore = require('better-queue-sql');
var _ = require('lodash');
// Improvements to SqlStore
SqlStore.prototype.getTaskStates = function(n, fields, cb) {
var self = this;
var first = true;
var q = self.adapter.knex(self.tableName).orderBy('lock', 'desc').orderBy('priority', 'DESC').orderBy('added', first ? 'ASC' : 'DESC');
q = (fields)? q.select(fields) : q.select();
q = (n > 0)? q.limit(n) : q;
q.then(function(rows) {
cb(null, rows);
}).catch(function(error) {
cb(error, null);
});
};
// Improvements to MemoryStore
MemoryStore.prototype.getTaskStates = function(n, fields, cb) {
var self = this;
var running = _.flatMap( self._running, (tasks, lockId) => {
return _.map( tasks, (task, taskId) => {
return {
id: taskId,
task: task,
lock: lockId,
priority: self._priorities[taskId]
};
});
});
var queued = this._queue.map( taskId => {
return {
id: taskId,
task: self._tasks[taskId],
priority: self._priorities[taskId]
};
});
var all = _.concat([], running, queued);
all = (n > 0)? _.take(all, n) : all;
if (cb) {
cb(null, all);
}
return all;
};
// MemoryStored that is backed by a sqlstore
// Always pushes changes to backend store
// But keeps a cache of queue tasks
function CachedStore(store) {
this._store = store;
this._taskIds = []; // Array of taskIds
this._taskStates = []; // Array of task states
this._taskStatesById = {}; // TaskId to task state
}
CachedStore.prototype.connect = function (cb) {
var self = this;
this._store.connect( self.__wrapWithUpdateQueue(cb) );
};
CachedStore.prototype.__wrapWithUpdateQueue = function(cb) {
var self = this;
return function(err, res) {
if (!err) {
self._store.getTaskStates(0, null, function(err, rows) {
self._taskStates = rows || [];
self._taskIds = _.map(self._taskStates, 'id');
self._taskStatesById = _.keyBy(self._taskStates, 'id');
console.log('In queue: ' + self._taskStates.length);
cb(null, res);
});
} else {
cb(err, res);
}
};
};
CachedStore.prototype.getTask = function (taskId, cb) {
return this._store.getTask(taskId, cb);
};
CachedStore.prototype.deleteTask = function (taskId, cb) {
return this._store.deleteTask(taskId, this.__wrapWithUpdateQueue(cb));
};
CachedStore.prototype.putTask = function (taskId, task, priority, cb) {
return this._store.putTask(taskId, task, priority, this.__wrapWithUpdateQueue(cb));
};
CachedStore.prototype.takeFirstN = function (n, cb) {
return this._store.takeFirstN(n, this.__wrapWithUpdateQueue(cb));
};
CachedStore.prototype.takeLastN = function (n, cb) {
return this._store.takeLastN(n, this.__wrapWithUpdateQueue(cb));
};
CachedStore.prototype.getLock = function (lockId, cb) {
return this._store.getLock(lockId, cb);
};
CachedStore.prototype.getRunningTasks = function (cb) {
return this._store.getRunningTasks(cb);
};
CachedStore.prototype.releaseLock = function (lockId, cb) {
return this._store.releaseLock(lockId, this.__wrapWithUpdateQueue(cb));
};
function Queue(process, opts) {
opts = opts || {};
BasicQueue.call(this, process, opts);
this._stateFile = opts.stateFile;
this.loadState();
}
Queue.prototype = Object.create(BasicQueue.prototype);
Queue.prototype.constructor = Queue;
// Improvements to the queue
Queue.prototype.size = function() {
var taskIds = this.taskIds();
if (this.length !== taskIds.length) {
console.log('Got taskIds length=%d, cached length=%d', taskIds.length, this.length);
}
return taskIds.length;
};
Queue.prototype.taskIds = function() {
var tasks = this.list();
if (tasks) {
return _.map(tasks, 'id');
}
};
Queue.prototype.list = function() {
var store = this._store;
if (store._taskStates) {
return store._taskStates;
} else if (store._queue && store._tasks) {
var tasks = store.getTaskStates();
return tasks;
}
};
Queue.prototype.firstTask = function() {
var tasks = this.list();
if (tasks && tasks.length > 0) {
return tasks[0];
}
};
Queue.prototype.lastTask = function() {
var tasks = this.list();
if (tasks && tasks.length > 0) {
return tasks[tasks.length-1];
}
};
Queue.prototype.maxPriority = function() {
var tasks = this.list();
return _.maxBy(tasks, 'priority').priority;
};
Queue.prototype.minPriority = function() {
var tasks = this.list();
return _.minBy(tasks, 'priority').priority;
};
Queue.prototype.clear = function() {
// Clears the queue
this.pause();
var taskIds = this.taskIds();
for (var i = 0; i < taskIds.length; i++) {
console.log('cancel %s', taskIds[i]);
this.cancel(taskIds[i]);
}
this.resume();
};
Queue.prototype.isPaused = function() {
return this._stopped;
};
Queue.prototype.status = function() {
return { isPaused: this.isPaused(), size: this.size() };
};
Queue.prototype.saveState = function() {
if (this._stateFile) {
var state = {
isPaused: this.isPaused()
};
fs.writeFileSync(this._stateFile, JSON.stringify(state), 'utf-8');
}
};
Queue.prototype.loadState = function() {
if (this._stateFile && fs.existsSync(this._stateFile)) {
var state = fs.readFileSync(this._stateFile, 'utf-8');
if (state) {
state = JSON.parse(state);
if (state.isPaused) {
this.pause();
}
}
}
};
Queue.getCachedSqlStore = function(opts) {
var store = new SqlStore(opts);
var cached = new CachedStore(store);
return cached;
};
module.exports = Queue;
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

暂无描述
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gxdcode/ScanNet.git
git@gitee.com:gxdcode/ScanNet.git
gxdcode
ScanNet
ScanNet
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /