首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emcee不能在Windows中运行多线程

Emcee不能在Windows中运行多线程
EN

Stack Overflow用户
提问于 2017-01-09 07:38:50
回答 2查看 491关注 0票数 1

我在Windows桌面上以多线程模式运行python Emcee MCMC代码时遇到了问题。它只有一个线程就能很好地运行,在我的Mac笔记本电脑上以单线程或多线程模式运行。以下是简单的示例代码(取自Emcee网站示例)。

代码语言:javascript
复制
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中没有记录错误,但在命令提示符窗口中,我看到了混杂的错误消息,就像两个进程试图同时写入错误消息一样。我似乎不能从窗口复制和粘贴它们,但它们的结尾是:

代码语言:javascript
复制
"Attribute Error: 'module' object has no attribute 'lnprob'

在这两台机器上,我都是在Jupyter笔记本上运行它。我已经检查了emcee、conda和anaconda的更新版本。你知道为什么我会有麻烦吗?

EN

回答 2

Stack Overflow用户

发布于 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。您可以添加以下行

代码语言:javascript
复制
`os.environ["CC"] = "gcc-6"`    

`os.environ["CXX"] = "g++-6"`

setup.py或call

代码语言:javascript
复制
`CC=gcc-6; python setup.py build; pip install -e` 

才能让它正常工作。这应该在文档中更新。

票数 0
EN

Stack Overflow用户

发布于 2018-01-12 10:46:28

在主模块中使用适当的习惯用法(if __name__ == '__main__':)可以解决这个问题:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41539130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档