我在Windows桌面上以多线程模式运行python Emcee MCMC代码时遇到了问题。它只有一个线程就能很好地运行,在我的Mac笔记本电脑上以单线程或多线程模式运行。以下是简单的示例代码(取自Emcee网站示例)。
import numpy as np
import emcee
def lnprob(x, ivar):
return -0.5 * np.sum(ivar * x ** 2)
ndim, nwalkers = 10, 100
ivar = 1. / np.random.rand(ndim)
p0 = [np.random.rand(ndim) for i in range(nwalkers)]
sampler = emcee.EnsembleSampler(nwalkers, ndim, lnprob, args=[ivar], threads=2)
%time sampler.run_mcmc(p0, 10000)如果我设置了threads=1,它在两台机器上都运行得很好,大约需要5秒。如果我设置了threads= 2,它在Mac上运行良好,但在windows机上挂起。notebook中没有记录错误,但在命令提示符窗口中,我看到了混杂的错误消息,就像两个进程试图同时写入错误消息一样。我似乎不能从窗口复制和粘贴它们,但它们的结尾是:
"Attribute Error: 'module' object has no attribute 'lnprob'在这两台机器上,我都是在Jupyter笔记本上运行它。我已经检查了emcee、conda和anaconda的更新版本。你知道为什么我会有麻烦吗?
发布于 2017-04-16 01:20:42
我也有同样的问题,也许这对我有帮助:
(来自:anaconda windows package and multithreading #381)
我可以通过os x上的anaconda 2和3包确认多线程不能正常工作。
默认情况下,在OSX 10.11上使用anaconda 2和3从源代码构建不起作用,但是稍微修改一下编译器选项就可以正常运行。
默认情况下,homebrew会安装与版本化名称一起使用的gcc,例如,gcc-6。您可以添加以下行
`os.environ["CC"] = "gcc-6"`
`os.environ["CXX"] = "g++-6"`setup.py或call
`CC=gcc-6; python setup.py build; pip install -e` 才能让它正常工作。这应该在文档中更新。
发布于 2018-01-12 10:46:28
在主模块中使用适当的习惯用法(if __name__ == '__main__':)可以解决这个问题:
import numpy as np
import emcee
def lnprob(x, ivar):
return -0.5 * np.sum(ivar * x ** 2)
if __name__ == '__main__':
ndim, nwalkers = 10, 100
ivar = 1. / np.random.rand(ndim)
p0 = [np.random.rand(ndim) for i in range(nwalkers)]
sampler = emcee.EnsembleSampler(nwalkers, ndim, lnprob, args=[ivar], threads=2)
sampler.run_mcmc(p0, 10000)https://stackoverflow.com/questions/41539130
复制相似问题