问题标签 [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 回答
1312 浏览

python - 是我自己还是 Windows 上新的 Python 期货模块出现了严重问题

我在 Windows XP 上,我遇到了新的 Python 3.2 期货模块的问题。看来我无法ProcessPoolExecutor上班了。会话示例:

对我来说,这里似乎有问题。

0 投票
2 回答
2905 浏览

python - Python 3 concurrent.futures 套接字服务器适用于 ThreadPoolExecutor 但不适用于 ProcessPoolExecutor

我正在尝试使用新的 concurrent.futures 类创建一个简单的套接字服务器。我可以让它与 ThreadPoolExecutor 一起正常工作,但是当我使用 ProcessPoolExecutor 时它只是挂起,我不明白为什么。鉴于这种情况,我认为这可能与试图将某些不能腌制的子进程传递给子进程有关,但我不这么认为。我的代码的简化版本如下。我会很感激任何建议。

0 投票
1 回答
1451 浏览

python - executor.map 和非循环参数

我正在尝试将我的脚本从使用线程转换为更酷的多处理(使用 python 3.2 和concurrent.futures,但是这段代码崩溃了

我得到错误_pickle.PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failed。阅读此答案时,我认为问题在于不可能将 lambda 函数作为参数,executor.map()并且为了使executor.map()我需要开发一个单参数函数,但是这些pci_idsoptions.verbose是可变的,因此我无法将它们指定为固定帮助函数中的值。

有什么想法该怎么做?

0 投票
1 回答
5013 浏览

python - concurrent.futures 代码中的死锁

我一直在尝试使用 并行化一些代码,concurrent.futures.ProcessPoolExecutor但一直遇到奇怪的死锁,而ThreadPoolExecutor. 一个最小的例子:

在 python 3.2.2(在 64 位 Ubuntu 上)中,这似乎在提交所有作业后一直挂起 - 每当提交的作业数量大于工人数量时,这似乎就会发生。如果我用它替换ProcessPoolExecutorThreadPoolExecutor可以完美地工作。

作为调查的尝试,我给了每个未来一个回调来打印的值i

这让我更加困惑 - iprint out bycallback的值是它被调用时的值,而不是它被定义时的值(所以我从来没有看到callback 0,但我得到了很多callback 99s)。再次ThreadPoolExecutor打印出期望值。

想知道这是否可能是一个错误,我尝试了 python 的最新开发版本。现在,代码至少似乎终止了,但我仍然得到错误的i打印值。

所以任何人都可以解释:

  • ProcessPoolExecutor在 python 3.2 和显然修复了这个死锁的当前开发版本之间发生了什么

  • i为什么要打印的“错误”值

编辑:正如jukiewicz在下面指出的那样,打印当然i会在调用回调时打印值,我不知道我在想什么......如果我传递一个值为的可调用对象i作为其属性之一,按预期工作。

编辑:更多信息:所有回调都已执行,因此看起来executor.shutdown(由 调用executor.__exit__)无法判断进程已完成。这似乎在当前的 python 3.3 中已完全修复,但似乎对 and 进行了很多更改multiprocessingconcurrent.futures所以我不知道是什么解决了这个问题。由于我不能使用 3.3(它似乎与 numpy 的发行版或开发版都不兼容),我尝试简单地将其多处理和并发包复制到我的 3.2 安装中,这似乎工作正常。尽管如此,据我所知,ProcessPoolExecutor在最新版本中完全被破坏但没有其他人受到影响,这似乎有点奇怪。

0 投票
1 回答
977 浏览

python - ThreadPoolExecutor 内部结构

我正在使用concurrent.futures' 类ThreadPoolExecutor对 Web 服务进行压力测试。

据我所知,max_workers构造函数参数告诉执行器池中的最大线程数是多少。无论如何,是否可以保证这是将有效使用的数字,或者它可能会小于(例如,由于某些硬件限制)?

如果是这样,有没有办法知道有多少工作线程将被有效实例化?

0 投票
2 回答
4035 浏览

python - Python 的 `futures` 的 `DummyExecutor`

Python 的futures包让我们可以享受ThreadPoolExecutor并行ProcessPoolExecutor执行任务。

然而,为了调试,有时用一个虚拟的临时替换真正的并行是有用的,它在主线程中以串行方式执行任务,而不产生任何线程或进程。

有没有实现的地方DummyExecutor

0 投票
1 回答
3317 浏览

python - concurrent.futures ThreadPoolExecutor 等待失败?

我正在尝试使用 concurrent.futures 中的 ThreadPoolExecutor 来提高脚本性能。我正在通过 Popen 启动一些外部 python 脚本并将它们封装为未来对象,但是这些对象在完成后进入回调函数,但我可以看到它们在我的机器上运行(它们运行了几分钟)。代码如下所示:

我还尝试了使用 running() 和 wait() 未来函数的不同方法,但结果相同。未来的对象被标记为已经完成,但实际上它们仍在运行。我错过了什么吗?

谢谢,

0 投票
1 回答
5042 浏览

python - 与 Python 中的多处理相比,concurrent.futures 有哪些优势?

我正在用 Python 编写一个应用程序,我需要同时运行一些任务。模块 multiprocessing 提供类 Process 并且 concurrent.futures 模块具有类 ProcessPoolExecutor。两者似乎都使用多个进程来执行它们的任务,但它们的 API 是不同的。为什么我应该使用一个而不是另一个?

我知道 concurrent.futures 是在 Python 3 中添加的,所以我想它会更好吗?

0 投票
1 回答
8176 浏览

python - concurrent.futures 是 GIL 的药物吗?

我只是在搜索这个新实现,我使用 python 2.7,我必须安装,所以如果我使用它,我会忘记 CPython 上的 GIL 这个词吗?

0 投票
1 回答
634 浏览

python - 将 Python 期货用于没有结果的任务是个好主意吗?

concurrent.futures问题出现了,当我开始使用这样的模块在对象上实现异步 set 和 get 操作时:

但是现在,设置一个值并等待它使用起来有点尴尬,并且在语义上“不正确”

虽然我觉得它仍然有效,因为Foo对象处于最低级别,并且可以在期货之上构建进一步的抽象。

所以,总结一下我的问题:

  • 期货是从对象异步获取/设置值的正确抽象吗?特别是对于不返回任何值的设置器?
  • 我应该添加一个blocking参数以set_something摆脱result()调用吗?我对这种方法持怀疑态度,因为那样我会鼓励根本不要使用期货。
  • 你会怎么做?