问题标签 [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.
scala - Scala 嵌套期货
我有几个未来。campaignFuture 返回一个 List[BigInt] 并且我希望能够为从第一个返回的列表中的每个值调用第二个未来 profileFuture。第二个future只能在第一个future完成时调用。我如何在 Scala 中实现这一点?
scala - 没有竞争条件的 akka 演员选择
我有一个期货池,每个未来都使用相同的 akka 演员系统——系统中的一些演员应该是全球性的,有些只在一个未来使用。
PhantomExecutor 尝试使用一个共享的全局参与者(简单增量计数器)system.actorSelection
但是在并发环境中,由于竞争条件,这种方法不起作用。
对于这个问题,我只知道一种解决方案——在拆分为期货之前创建全局参与者。但这意味着我无法封装来自顶级图书馆用户的大量隐藏工作。
python - Python,有助于并行化算法(试图在线程池中拥有线程池
我正在尝试并行化一些计算,但我不明白为什么我的一个版本(我认为应该更快)比它慢。
简而言之,我有一个 userIds 列表(或多或少 200)和一个 placesId 列表(或多或少 200 万)。我需要计算每对用户/地点的分数。好处是计算完全相互独立并且(取决于我们如何实现算法,甚至不需要返回结果)。
我为此尝试了两种方法。
第一种方法
- 拉取主线程中的所有位置和所有用户
循环遍历所有用户并生成 x 线程(在我的小 Macbook 8 上似乎是最好的)
当所有期货都完成后,我遍历所有期货并将结果插入数据库(工作任务返回一个列表 [userId,placeId,score])
我有一个任务将遍历所有地方并返回结果
/li>
这位女士和绅士使所有用户/地点的集合在 10 分钟内计算出来(而不是顺序的 1.30 小时 :))
但是我虽然..为什么不并行化分数计算?因此,不必一个任务一次循环遍历所有 2000 个位置,而是在其他 8 个线程上生成计算。
第二种方法:
基本上这种方法是通过以下方式替换“任务”函数中的循环:
我必须做的另一个修改是在 calculateScores 函数中
如您所见,因为现在 calculateScores 本身将在 8 个线程上,所以我无法共享数据库连接,否则我会遇到竞争条件错误(然后脚本将在 4 次中有 3 次崩溃)
这种方法,我认为会更快,但需要 25 分钟......(而不是简单的 for 循环的 10 分钟......)
我 90% 确定这会更慢,因为现在每个任务都从池中获取数据库连接,这在某种程度上非常昂贵,因此速度很慢。
有人可以就我的场景充分利用并行化的最佳方法给我建议吗?
这是使任务返回结果的好主意吗?还是应该在它们在 calculateScores 函数中准备好后立即将它们插入数据库?
在 ThreadPool 中有一个 Threadpool 是一种好习惯吗?
我应该尝试执行一些多进程吗?
谢谢你!
python - GitPython 导致 concurrent.futures.ThreadPoolExecutor 忽略 max_workers
我正在编写一些 Python 代码来并行对大量 git 存储库执行操作。为此,我尝试结合concurrent.futures和GitPython,在单独的未来任务中克隆每个存储库。这是使用 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 个期货。
这可能是什么原因?
scala - Scala、Futures、WS 库、Api
我有玩!在通过发送 http 请求与另一台服务器通信的 Scala 应用程序上。该系统有局限性:一个令牌只能同时处理 5 个 http 请求。
我写了这个方法:
有些演员使用这种方法,几秒钟后我得到了这个异常。
我的问题是:如何控制“运行模式”中的功能数量?也许我应该使用另一个执行上下文而不是默认的?请解释我或对执行上下文、线程等进行很好的介绍
我想尽快从远程服务获取信息,而不是一一发送
谢谢!
python - ThreadPoolExecutor 能否帮助提高单线程应用效率?
我们想做一个电子商务应用程序,团队是python开发人员,但不使用python web框架(Django/Flask...),因为我们发现Tornado的简单性非常好,我们给了他很大一部分.
但问题是,Tornado 是单线程的,应用程序将使用散列(登录)和图像处理(缩略图生成)。可以ThreadPoolExecutor
像 Apache 那样扮演多线程服务器的角色吗,就像这个例子一样?
因此,Tornado 将散列工作发送到另一个线程,以释放自己并能够接收其他请求。这种方法会奏效吗?
注意:还有一个涉及负载均衡器的解决方案,但团队现在不想追求这个解决方案。
scala - 递归函数中的并发
我有这样的功能
该函数调用线程内的另一个迭代,我想优化这个函数,因为它需要很多时间(大约 300 毫秒),我必须在迭代中调用很多该函数。
有什么建议如何通过并发或有效递归来优化该功能?
感谢作为
python - 使用方法 ThreadPoolExecutor.shutdown(wait=True), shutdown(wait=False) 和不使用这个方法有什么区别?
我无法理解差异。帮我看看这个区别。而ProcessPoolExecutor呢,他的行为是一样的吗?
multithreading - 分解任务的期货向量?
我有来自 Web 服务的响应,如果数据项的数量很大,我想将其拆分为较小的请求并并行执行请求和随后对该请求的解析。本质上,当第一个请求解析数据时,后续请求应该获取它。
似乎有很多方法可以做到这一点,我想知道期货在这种情况下是否合适。我听到一些评论说期货不应该用于 IO,而论点则相反。
实际上,我正在尝试这样做:
但是,我收到一个错误“错误 C2064:术语不计算为采用 3 个参数的函数”,我不知道为什么。期货是否不允许将它们放入诸如向量之类的容器中?
如果是这样,我应该以不同的方式处理这个问题,还是有不同的方法来获取期货列表?即我必须使用打包任务吗?
理想情况下,我认为,这应该与内核数量更接近,而不是随意地将响应分成块,然后尝试为每个块创建一个线程。
python - Concurrent.futures > 在命令行中运行良好,而不是在使用 pyinstaller 或 py2exe 编译时
我有一个非常简单的基于 concurrent.futures 的脚本,它在命令行(Python 2.7)中运行良好,但是在使用 py2exe 或 Pyinstaller 编译时会崩溃(编译后的程序会打开越来越多的进程,如果我不这样做,最终会完全阻塞窗口先把他们都杀了)。
代码非常标准/简单,所以我很难理解这个问题的根源......有没有人早些时候经历过这个?(我发现与多处理的类似问题相关的讨论......但没有什么可以用来解决我的问题)
最好的问候, S