我正在阅读有关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) 更新:此处还询问了PgAdmin支持邮件列表.
所以我启动并运行了一个AWS Redshift群集,我可以通过命令行连接到它
$ psql -h host -d database -p port -U username
我想通过pgAdmin III连接到集群,但在连接到集群后,我收到一条错误消息:
错误:必须是超级用户才能查看default_tablespace
请注意,我输入的字段是:名称,主机,端口,维护数据库,用户名和密码,所有输入都与psql命令相同.
现在,如果我通过psql连接,我检查:
$ \tu
该用户[由AWS授予的主用户]实际上是超级用户.那么有什么建议可能是导致此错误的原因吗?
作为一个后续问题,当我连接到其他远程dbs时,即使我不是超级用户,我也不会收到此错误,所以这里发生了什么?当通过pgAdmin连接时,Redshift会导致此错误发生吗?
我试图了解加载模块与导入模块之间的区别,如果有的话.
我正在使用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我实际导入模块之前存在?
我想在这里找一点澄清这个问题的答案:
我的用例如下:
我有一个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)摆脱初始列的最佳方法是什么?
假设我有一些基类:
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,我在2.7.3工作,我正在努力理解import语句.
该文件说,当你试图导入一个模块,解释器将首先搜索内置的模块之一.
内置模块是什么意思?
然后,文档说明解释器在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如何知道在哪里查找它们?
环境变量如何工作?根据我的理解,环境变量特定于它们设置的过程,但是,如果我打开多个终端窗口并运行env,它们都会显示许多相同的变量,例如,PATH.我知道持久性环境变量的文件位置,例如/etc/environment,它包含我的PATH变量.是否可以分辨存储持久环境变量的位置?存储新的持久环境变量的建议位置是什么?环境变量实际上如何使用Python解释器?Python解释器寻找PYTHONPATH,但它如何在细节级别工作?
我有以下代码:
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之间的区别是什么,以及这种场景中的正确用法是什么?