小编Jas*_*ele的帖子

来自HTTP/REST服务的进度通知

我正在开发一个Web应用程序,它将任务提交给主/工作系统,该系统将任务分配给一系列工作器实例中的任何一个.工作队列主服务器作为单独的进程运行(在一台单独的机器上),任务通过HTTP/REST请求提交给主服务器.将任务提交到工作队列后,客户端应用程序可以提交另一个HTTP请求以获取有关任务的状态信息.

对于我的Web应用程序,我希望它提供某种进度条视图,为用户提供有关任务处理进度的指示.实现这一点的显而易见的方法是使用AJAX进度计小部件,该小部件定期轮询工作队列以查找已提交任务的状态.我的问题是,如果没有频繁的民意调查,有没有更好的方法来实现这一目标?

我已经考虑过让客户端Web应用程序打开一个服务器套接字,它可以监听来自工作主机的通知.我的另一个类似想法是使用XMPP或类似的协议进行状态通知.(当然,主/工作系统需要更新以提供通知,但我拥有代码,因此可以自己进行任何必要的更新.)

有关建立这样的通知系统的最佳方法的任何想法?额外的努力是值得的,还是简单的轮询解决方案?

ajax rest notifications http

11
推荐指数
2
解决办法
8548
查看次数

跨平台的GUI语言/工具包

我正在尝试编写一个跨平台的GUI应用程序,该应用程序将部署到Windows,Mac OS X和Linux.我的要求是:

  1. 所有三个部署平台的单一代码库,没有大量条件逻辑来处理平台之间的差异.
  2. 在所有三个平台上看起来尽可能接近"原生".
  3. 容易分派到所有三个平台,在这个意义上,它可以被终端用户方便地安装,并且不极端膨胀苦(如在讨论这个ArsTechnica文章.)

基于这些要求,我将工具包的选择范围缩小到了Qt和wxWidgets,因为我所知道的其他工具包(包括Java的Swing和SWT,Flex,AIR等)都没有满足"本机外观"的要求.需求.在这两个最终竞争者中,Qt似乎为我在所有三个部署平台上看起来和感觉都是原生的应用程序提供了更好的支持,但我愿意考虑相反的意见.

我宁愿不使用C++作为实现语言,但我不确定是否有任何实际的替代方案.我最担心的是使用C++以外的实现语言是部署问题.正如Ars Technica文章中所讨论,PyQt在任何实际意义上都不符合"简单部署"的要求,我怀疑Qt的大多数其他语言绑定都会遇到相同的部署问题(至少在Mac OS X上). (或Scala)与QtJambi?QtRuby?wxPython?

有没有人知道满足上述三个要求的语言和工具包的任何组合?

user-interface desktop qt wxwidgets cross-platform

6
推荐指数
1
解决办法
2043
查看次数

C++ master/worker

我正在寻找跨平台的C++主/工作库或工作队列库.一般的想法是我的应用程序将创建某种Task或Work对象,将它们传递给工作主服务器或工作队列,这反过来又会在单独的线程或进程中执行工作.为了提供一些上下文,应用程序是一个CD开膛手,我想要并行化的任务是"rip track","将WAV编码为Mp3"等.

我的基本要求是:

  • 必须支持可配置数量的并发任务.
  • 必须支持任务之间的依赖关系,以便在完成所有依赖的任务之前不执行任务.
  • 必须允许取消任务(或者至少不能阻止我将取消编码到我自己的任务中).
  • 必须允许将状态和进度信息报告回主应用程序线程.
  • 必须适用于Windows,Mac OS X和Linux
  • 必须是开源的.

如果这个库也是特别好的:

  • 与Qt的信号/插槽机制集成.
  • 支持使用线程进程来执行任务.

通过类比,我正在寻找类似于Java的ExecutorService或其他类似的线程池库,但是在跨平台的C++中.有谁知道这样的野兽?

谢谢!

c++ concurrency multithreading threadpool

5
推荐指数
1
解决办法
3103
查看次数

基于Qt的CD开膛手的线程构建模块(TBB)?

我正在用C++和Qt构建一个CD ripper应用程序.我想并行化应用程序,以便可以同时编码多个轨道.因此,我以这样的方式构建应用程序,即对轨道进行编码是一个"任务",我正在研究一种机制来同时运行一些这些任务.当然,我可以使用线程完成此任务并编写自己的任务队列或工作管理器,但我认为英特尔的线程构建模块(TBB)可能是一个更好的工具.不过,我有几个问题.

  1. 是否将WAV文件编码为FLAC,Ogg Vorbis或Mp3文件,这些文件可以作为tbb :: task运行良好?教程文档指出"如果线程频繁阻塞,则在使用任务调度程序时会出现性能损失".我认为我的编码任务不会经常阻塞互斥锁,但需要相对频繁地访问磁盘,因为它们必须从磁盘读取WAV数据才能进行编码.在本教程描述的意义上,这种级别的磁盘活动是否有问题?
  2. TBB是否与Qt配合良好?使用Qt线程时,可以跨线程透明地使用Qt的信号/插槽机制.如果我使用tbb :: tasks而不是Qt线程,是否也是如此?会不会有其他"陷阱"?

感谢您提供的任何见解.

c++ concurrency qt multithreading tbb

5
推荐指数
1
解决办法
904
查看次数

Elixir类型规范和参数化类型变量

我试图弄清楚如何在Elixir类型和函数规范中组合参数化类型类型变量.举个简单的例子,假设我正在定义一个Stack模块:

defmodule Stack do
  @type t :: t(any)
  @type t(value) :: list(value)

  @spec new() :: Stack.t
  def new() do
    []
  end

  # What should the spec be?
  def push(stack, item) do
    [item|stack]
  end
end
Run Code Online (Sandbox Code Playgroud)

使用第3行的参数化类型规范,我可以定义一个函数来创建一个只应包含整数的新堆栈:

@spec new_int_stack() :: Stack.t(integer)
def new_int_stack(), do: Stack.new
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在我想确保只有整数可以推入这个堆栈.例如,透析器应该没问题:

int_stack = new_int_stack()
Stack.push(int_stack, 42)
Run Code Online (Sandbox Code Playgroud)

但是透析器应该抱怨这个:

int_stack = new_int_stack()
Stack.push(int_stack, :boom)
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚push函数的类型规范应该强制执行什么.在Erlang中,我很确定这种语法可以解决这个问题:

-spec push(Stack, Value) -> Stack when Stack :: Stack.t(Value).
Run Code Online (Sandbox Code Playgroud)

有没有办法用Elixir表达这个约束@spec

types elixir dialyzer

4
推荐指数
1
解决办法
1004
查看次数

Clojure:从符号列表中定义多方法?

在我正在进行的Clojure练习中,我有几个多方法,所有这些方法都只identity用作调度函数.例如:

(defmulti amount identity)
(defmulti bottles identity)
(defmulti pronoun identity)
(defmulti action identity)
(defmulti pred identity)
Run Code Online (Sandbox Code Playgroud)

由于它们都使用相同的identity函数进行调度,我想迭代名称并调用defmulti每个名称而不是重复defmulti调用.我试过这个:

(doseq [m '(amount bottles pronoun action pred)]
  (defmulti m identity))
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,似乎defmulti没有正确的效果,就像我后来defmethod用于任何多方法名称时,我得到一个错误,如:

(defmethod amount 0 [n] "whatever")

CompilerException java.lang.RuntimeException: Unable to resolve symbol: amount in this context, compiling:(NO_SOURCE_PATH:1:1)
Run Code Online (Sandbox Code Playgroud)

是否有可能迭代一个符号或名称列表并调用defmulti它们中的每一个,如果是这样,它怎么能完成?

clojure multimethod

2
推荐指数
1
解决办法
198
查看次数