请告诉我之间的差异ThreadPool
,并Pool
在multiprocessing
模块。当我尝试代码时,这是我看到的主要区别:
from multiprocessing import Pool
import os, time
print("hi outside of main()")
def hello(x):
print("inside hello()")
print("Proccess id: ", os.getpid())
time.sleep(3)
return x*x
if __name__ == "__main__":
p = Pool(5)
pool_output = p.map(hello, range(3))
print(pool_output)
我看到以下输出:
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
hi outside of main()
inside hello()
Proccess id: 13268
inside hello()
Proccess id: 11104
inside hello()
Proccess id: 13064
[0, 1, 4]
使用“ ThreadPool”:
from multiprocessing.pool import ThreadPool
import os, time
print("hi outside of main()")
def hello(x):
print("inside hello()")
print("Proccess id: ", os.getpid())
time.sleep(3)
return x*x
if __name__ == "__main__":
p = ThreadPool(5)
pool_output = p.map(hello, range(3))
print(pool_output)
我看到以下输出:
hi outside of main()
inside hello()
inside hello()
Proccess id: 15204
Proccess id: 15204
inside hello()
Proccess id: 15204
[0, 1, 4]
我的问题是:
为何每次在__main __()外运行Pool
?
multiprocessing.pool.ThreadPool
没有产生新的进程?它只是创建新线程?
如果是这样,使用multiprocessing.pool.ThreadPool
与仅使用threading
模块之间有什么区别?
我在任何ThreadPool
地方都没有看到任何官方文档,有人可以在哪里找到我吗?
该multiprocessing.pool.ThreadPool
行为一样multiprocessing.Pool
,唯一的区别在于使用线程,而不是进程运行的工人逻辑。
你看到的原因
hi outside of main()
会被多次打印multiprocessing.Pool
是由于该池将生成5个独立的进程。每个进程将初始化其自己的Python解释器并加载模块,从而导致print
再次执行顶层。
请注意,仅当使用spawn
进程创建方法时才会发生这种情况(Windows上仅此方法可用)。如果使用fork
一个(Unix),则与线程一样,该消息仅打印一次。
将multiprocessing.pool.ThreadPool
作为其实现从未完成未记录。它缺少测试和文档。您可以在源代码中看到其实现。
我相信下一个自然的问题是:何时使用基于线程的池,何时使用基于进程的池?
经验法则是:
multiprocessing.pool.ThreadPool
multiprocessing.Pool
multiprocessing.Pool
由于流程隔离带来的优势,我通常更喜欢在Python
3上,您可能需要看一下concurrent.future.Executor
池的实现。
问题内容: 我正在学习如何在Python中使用和模块来并行运行某些操作并加速我的代码。 我发现很难理解一个对象与一个对象之间的区别是什么(也许是因为我没有任何理论背景)。 另外,对我来说,如何实例化一个作业队列并使其只有4个(例如)并行运行,而另一个则等待资源释放后再执行,对我来说也不是很清楚。 我发现文档中的示例很清楚,但并不十分详尽。一旦我尝试使事情复杂化,我就会收到很多奇怪的错误(例如无法腌
我的工作应该使用并行技术,我是python的新用户。因此,我想知道您是否可以分享一些关于python和模块的资料。这两者有什么区别?
问题内容: Python模块和Python包之间有什么区别? 问题答案: 模块是单个文件(一个或多个文件),可在一个导入下导入并使用。例如 包是目录中提供包层次结构的模块的集合。
问题内容: 我已经看到许多项目使用 模块而不是 标准库中的模块。另外,有许多不同的模块。为什么要使用这些替代方法而不是标准库中的替代方法? 问题答案: 是 ,已添加到stdlib中。但是自从2.6中添加以来,它具有处理更多Python版本(2.4+)的优势。 的更新频率也比Python高,因此,如果您需要(或想要)最新版本,则尽可能使用它自己。 我认为,一种好的做法是将其中一个作为后备。
问题内容: 我读了很多文档,并且越来越困惑。我基本上不知道 服务 指示 模组 我看到了很多自定义组件。有时他们使用指令,有时使用服务。它总是从模块开始。有人可以举例说明这三种类型之间的区别吗? 问题答案: 可以将模块视为连接其他许多事物的地方,例如指令,服务,常量等。可以将模块注入到其他模块中,从而使您可以高度重用。 编写有角度的应用程序时,您将拥有一个顶级模块,即您的应用程序代码(没有模板)。
问题内容: 和处理特殊字符之间有什么区别? 被空间接受。 在的情况下,被接受为。 问题答案: 是要从URI(Spring称为URI模板)中获取一些占位符 也是要从URI中获取参数—请参见Spring Reference第16.3.3.3章,使用@RequestParam将请求参数绑定到方法参数 如果该网址在2013年12月5日获得了用户1234的发票,则控制器方法如下所示: 同样,请求参数可以是可