小编Jus*_*tin的帖子

什么时候在进程上调用.join()?

我正在阅读有关Python中多处理模块的各种教程,并且无法理解调用的原因/时间process.join().例如,我偶然发现了这个例子:

nums = range(100000)
nprocs = 4

def worker(nums, out_q):
    """ The worker function, invoked in a process. 'nums' is a
        list of numbers to factor. The results are placed in
        a dictionary that's pushed to a queue.
    """
    outdict = {}
    for n in nums:
        outdict[n] = factorize_naive(n)
    out_q.put(outdict)

# Each process will get 'chunksize' nums and a queue to put his out
# dict into
out_q = Queue()
chunksize = int(math.ceil(len(nums) / float(nprocs)))
procs = [] …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

30
推荐指数
2
解决办法
3万
查看次数

从pgAdmin连接到Redshift群集

更新:此处还询问了PgAdmin支持邮件列表.


所以我启动并运行了一个AWS Redshift群集,我可以通过命令行连接到它

$ psql -h host -d database -p port -U username

我想通过pgAdmin III连接到集群,但在连接到集群后,我收到一条错误消息:

错误:必须是超级用户才能查看default_tablespace

请注意,我输入的字段是:名称,主机,端口,维护数据库,用户名和密码,所有输入都与psql命令相同.

现在,如果我通过psql连接,我检查:

$ \tu

该用户[由AWS授予的主用户]实际上是超级用户.那么有什么建议可能是导致此错误的原因吗?

作为一个后续问题,当我连接到其他远程dbs时,即使我不是超级用户,我也不会收到此错误,所以这里发生了什么?当通过pgAdmin连接时,Redshift会导致此错误发生吗?

pgadmin amazon-redshift

20
推荐指数
1
解决办法
2万
查看次数

Python sys.modules包含一个尚未导入的模块

我试图了解加载模块与导入模块之间的区别,如果有的话.

我正在使用Python 2.7.3,我只是从命令行运行Python.

如果我执行:

import sys
sys.modules
Run Code Online (Sandbox Code Playgroud)

我得到一个列表,其中包括os,例如.文档说这sys.modules是"已加载"模块的列表.但是,如果我尝试运行类似的东西os.environ,我会得到一个NameError,告诉我os没有定义.但是,如果我然后运行import os,这将解决问题.谁能解释为什么os在sys.modules我实际导入模块之前存在?

python

8
推荐指数
1
解决办法
2387
查看次数

使用Python Mapper进行Hadoop流式传输的多个输出文件

我想在这里找一点澄清这个问题的答案:

在Hadoop Streaming中生成单独的输出文件

我的用例如下:

我有一个map-only mapreduce作业,它接受一个输入文件,进行大量的解析和修改,然后写回来.但是,某些行可能或可能不是格式不正确,如果是这种情况,我想将原始行写入单独的文件.

似乎这样做的一种方法是将文件名添加到我正在打印的行中并使用multipleOutputFormat参数.例如,如果我原来有:

if line_is_valid(line):
    print name + '\t' + comments
Run Code Online (Sandbox Code Playgroud)

我可以这样做:

if line_is_valid(line):
    print valid_file_name + '\t' + name + '\t' + comments
else:
    print err_file_name + '\t' + line
Run Code Online (Sandbox Code Playgroud)

我对此解决方案的唯一问题是我不希望file_name显示为文本文件中的第一列.我想我可以再运行另一个工作去除每个文件的第一列,但这看起来有点傻.所以:

1)这是使用python mapreduce作业管理多个输出文件的正确方法吗?

2)摆脱初始列的最佳方法是什么?

python hadoop

7
推荐指数
1
解决办法
6161
查看次数

Python:修饰一个在继承时要覆盖的类方法

假设我有一些基类:

class Task:
    def run(self):
        #override this!
Run Code Online (Sandbox Code Playgroud)

现在,我希望其他人继承Task并覆盖run()方法:

class MyTask(Task):
    def run(self):
        #successful override!
Run Code Online (Sandbox Code Playgroud)

但是,问题是必须在每个继承Task的类的run()方法之前和之后发生逻辑.

似乎我可以这样做的一种方法是在基类中定义另一个方法,然后调用run()方法.但是,我想问一下,有没有办法用装饰器来实现这个目的?这样做的最pythonic方式是什么?

python inheritance decorator

7
推荐指数
1
解决办法
3578
查看次数

sys.path()和PYTHONPATH问题

我一直在学习Python,我在2.7.3工作,我正在努力理解import语句.

  1. 该文件说,当你试图导入一个模块,解释器将首先搜索内置的模块之一.

    内置模块是什么意思?

  2. 然后,文档说明解释器在sys.path列出的目录中搜索,并且sys.path是从这些源初始化的:

    • 包含输入脚本(或当前目录)的目录.
    • PYTHONPATH(目录名列表,语法与shell变量相同PATH).
    • 依赖于安装的默认值.

    这是我的计算机使用python在命令行模式下的sys.path命令的示例输出:(我删除了一些以便它不会很大)

    ['', '/usr/lib/python2.7', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
    
    Run Code Online (Sandbox Code Playgroud)

    现在,我假设''路径指向包含'script'的目录,所以我想其余的将来自我的PYTHONPATH环境变量.但是,当我去终端并输入时env,PYTHONPATH不存在作为环境变量.我import os当时也试过了os.environ,但是得到了相同的输出.

    我真的没有PYTHONPATH环境变量吗?我不相信我曾经特别定义过PYTHONPATH环境变量,但我认为当我安装新包时,它们会自动更改该环境变量.如果我没有PYTHONPATH,我的sys.path如何填充?如果我下载新软件包,如果我没有这个PYTHONPATH变量,Python如何知道在哪里查找它们?

  3. 环境变量如何工作?根据我的理解,环境变量特定于它们设置的过程,但是,如果我打开多个终端窗口并运行env,它们都会显示许多相同的变量,例如,PATH.我知道持久性环境变量的文件位置,例如/etc/environment,它包含我的PATH变量.是否可以分辨存储持久环境变量的位置?存储新的持久环境变量的建议位置是什么?环境变量实际上如何使用Python解释器?Python解释器寻找PYTHONPATH,但它如何在细节级别工作?

python environment-variables python-2.7

4
推荐指数
1
解决办法
8606
查看次数

构造randomForest分类的公式然后使用预测

我有以下代码:

RFmodel = randomForest(as.factor(trainset[,55]) ~ . , trainset, ntree = ntree.array[i], mtry = mtry.array[j], maxnodes = maxnodes.array[k])
RFyhat = predict(RFmodel , testset[,-55])
RFyhat = as.numeric(levels(RFyhat)[RFyhat])
Testerr.randomforest[i,j,k] = sum(RFyhat != testset[,55])/length(testset[,55])
Run Code Online (Sandbox Code Playgroud)

这段代码在第二行引发错误,即它说:

eval(expr,envir,enclos)中的错误:找不到对象'V55'

然而,奇怪的是,当我执行以下两项操作之一时,错误消失了:1)将第一行中的trainset [,55]更改为trainset $ V55,2)将testset [, - 55]更改为testset.但是,错误率略有不同(我想因为在后者中,我使用testset [,55]作为一个独立变量,但这只是我的猜测).任何人都可以向我解释使用trainset [,55]和trainset $ V55之间的区别是什么,以及这种场景中的正确用法是什么?

r

1
推荐指数
1
解决办法
7536
查看次数