问题标签 [concurrent.futures]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6111 浏览

scala - Scala 嵌套期货

我有几个未来。campaignFuture 返回一个 List[BigInt] 并且我希望能够为从第一个返回的列表中的每个值调用第二个未来 profileFuture。第二个future只能在第一个future完成时调用。我如何在 Scala 中实现这一点?

0 投票
2 回答
722 浏览

scala - 没有竞争条件的 akka 演员选择

我有一个期货池,每个未来都使用相同的 akka 演员系统——系统中的一些演员应该是全球性的,有些只在一个未来使用。

PhantomExecutor 尝试使用一个共享的全局参与者(简单增量计数器)system.actorSelection

但是在并发环境中,由于竞争条件,这种方法不起作用。

对于这个问题,我只知道一种解决方案——在拆分为期货之前创建全局参与者。但这意味着我无法封装来自顶级图书馆用户的大量隐藏工作。

0 投票
1 回答
750 浏览

python - Python,有助于并行化算法(试图在线程池中拥有线程池

我正在尝试并行化一些计算,但我不明白为什么我的一个版本(我认为应该更快)比它慢。

简而言之,我有一个 userIds 列表(或多或少 200)和一个 placesId 列表(或多或少 200 万)。我需要计算每对用户/地点的分数。好处是计算完全相互独立并且(取决于我们如何实现算法,甚至不需要返回结果)。

我为此尝试了两种方法。

第一种方法

  1. 拉取主线程中的所有位置和所有用户
  2. 循环遍历所有用户并生成 x 线程(在我的小 Macbook 8 上似乎是最好的)

    当所有期货都完成后,我遍历所有期货并将结果插入数据库(工作任务返回一个列表 [userId,placeId,score])

  3. 我有一个任务将遍历所有地方并返回结果

    /li>

这位女士和绅士使所有用户/地点的集合在 10 分钟内计算出来(而不是顺序的 1.30 小时 :))

但是我虽然..为什么不并行化分数计算?因此,不必一个任务一次循环遍历所有 2000 个位置,而是在其他 8 个线程上生成计算。

第二种方法:

基本上这种方法是通过以下方式替换“任务”函数中的循环:

我必须做的另一个修改是在 calculateScores 函数中

如您所见,因为现在 calculateScores 本身将在 8 个线程上,所以我无法共享数据库连接,否则我会遇到竞争条件错误(然后脚本将在 4 次中有 3 次崩溃)

这种方法,我认为会更快,但需要 25 分钟......(而不是简单的 for 循环的 10 分钟......)

我 90% 确定这会更慢,因为现在每个任务都从池中获取数据库连接,这在某种程度上非常昂贵,因此速度很慢。

有人可以就我的场景充分利用并行化的最佳方法给我建议吗?

这是使任务返回结果的好主意吗?还是应该在它们在 calculateScores 函数中准备好后立即将它们插入数据库?

在 ThreadPool 中有一个 Threadpool 是一种好习惯吗?

我应该尝试执行一些多进程吗?

谢谢你!

0 投票
1 回答
278 浏览

python - GitPython 导致 concurrent.futures.ThreadPoolExecutor 忽略 max_workers

我正在编写一些 Python 代码来并行对大量 git 存储库执行操作。为此,我尝试结合concurrent.futuresGitPython,在单独的未来任务中克隆每个存储库。这是使用 OS X 10.10 上的内置 Python 2.7.6 以及通过 pip 安装的 GitPython 0.3.5 和 futures 2.2.0(向后移植到 2.7 的版本)。

我正在使用的代码的一个简单示例如下:

当我将wait_then_return函数提交给 executor 时,我得到了预期的行为:首先以四个为一组进行打印,然后大致沿着这些线完成,直到所有期货都完成。如果我切换它,clone_then_return那么执行程序似乎忽略了 max_workers参数并并行运行所有 20 个期货。

这可能是什么原因?

0 投票
2 回答
100 浏览

scala - Scala、Futures、WS 库、Api

我有玩!在通过发送 http 请求与另一台服务器通信的 Scala 应用程序上。该系统有局限性:一个令牌只能同时处理 5 个 http 请求。

我写了这个方法:

有些演员使用这种方法,几秒钟后我得到了这个异常。

我的问题是:如何控制“运行模式”中的功能数量?也许我应该使用另一个执行上下文而不是默认的?请解释我或对执行上下文、线程等进行很好的介绍

我想尽快从远程服务获取信息,而不是一一发送

谢谢!

0 投票
1 回答
887 浏览

python - ThreadPoolExecutor 能否帮助提高单线程应用效率?

我们想做一个电子商务应用程序,团队是python开发人员,但不使用python web框架(Django/Flask...),因为我们发现Tornado的简单性非常好,我们给了他很大一部分.

但问题是,Tornado 是单线程的,应用程序将使用散列(登录)和图像处理(缩略图生成)。可以ThreadPoolExecutor像 Apache 那样扮演多线程服务器的角色吗,就像这个例子一样?

因此,Tornado 将散列工作发送到另一个线程,以释放自己并能够接收其他请求。这种方法会奏效吗?

注意:还有一个涉及负载均衡器的解决方案,但团队现在不想追求这个解决方案。

0 投票
0 回答
90 浏览

scala - 递归函数中的并发

我有这样的功能

该函数调用线程内的另一个迭代,我想优化这个函数,因为它需要很多时间(大约 300 毫秒),我必须在迭代中调用很多该函数。

有什么建议如何通过并发或有效递归来优化该功能?

感谢作为

0 投票
1 回答
7025 浏览

python - 使用方法 ThreadPoolExecutor.shutdown(wait=True), shutdown(wait=False) 和不使用这个方法有什么区别?

我无法理解差异。帮我看看这个区别。而ProcessPoolExecutor呢,他的行为是一样的吗?

0 投票
1 回答
311 浏览

multithreading - 分解任务的期货向量?

我有来自 Web 服务的响应,如果数据项的数量很大,我想将其拆分为较小的请求并并行执行请求和随后对该请求的解析。本质上,当第一个请求解析数据时,后续请求应该获取它。

似乎有很多方法可以做到这一点,我想知道期货在这种情况下是否合适。我听到一些评论说期货不应该用于 IO,而论点则相反。

实际上,我正在尝试这样做:

但是,我收到一个错误“错误 C2064:术语不计算为采用 3 个参数的函数”,我不知道为什么。期货是否不允许将它们放入诸如向量之类的容器中?

如果是这样,我应该以不同的方式处理这个问题,还是有不同的方法来获取期货列表?即我必须使用打包任务吗?

理想情况下,我认为,这应该与内核数量更接近,而不是随意地将响应分成块,然后尝试为每个块创建一个线程。

0 投票
3 回答
1500 浏览

python - Concurrent.futures > 在命令行中运行良好,而不是在使用 pyinstaller 或 py2exe 编译时

我有一个非常简单的基于 concurrent.futures 的脚本,它在命令行(Python 2.7)中运行良好,但是在使用 py2exe 或 Pyinstaller 编译时会崩溃(编译后的程序会打开越来越多的进程,如果我不这样做,最终会完全阻塞窗口先把他们都杀了)。

代码非常标准/简单,所以我很难理解这个问题的根源......有没有人早些时候经历过这个?(我发现与多处理的类似问题相关的讨论......但没有什么可以用来解决我的问题)

最好的问候, S