小编Pyr*_*rce的帖子

ActiveRecord :: Relation对象如何调用类方法

ActiveRecord :: Relation对象如何调用类方法?

class Project < ActiveRecord::Base
  has_many :tasks
end

class Task < ActiveRecord::Base
  belongs_to :project

  def self.initial_tasks # class methods
   # here return initial tasks
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我们可以致电:

Project.first.tasks.initial_tasks # how it works
Run Code Online (Sandbox Code Playgroud)

initial_tasks 是一个类方法,我们不能在对象上调用类方法.

Project.first.tasks返回一个ActiveRecord :: Relation对象,那怎么能调用initial_tasks呢?

请解释.

ruby activerecord ruby-on-rails

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

父进程不会终止多进程守护进程

我有一个Python 2.7多处理过程,它不会在父进程退出时退出.我设置了守护进程标志,它应该强制它在父母死亡时退出.文档指出:

"当一个进程退出时,它会尝试终止所有守护进程的子进程."

p = Process(target=_serverLaunchHelper, args=args)
p.daemon = True
print p.daemon # prints True
p.start()
Run Code Online (Sandbox Code Playgroud)

当我通过kill命令终止父进程时,守护进程处于活动状态并且正在运行(在下次运行时阻塞该端口).子进程正在启动SimpleHttpServer并在serve_forever不执行任何其他操作的情况下进行调用.我的猜测是文档中的"尝试"部分意味着阻塞服务器进程正在停止进程死亡,并且它会让进程因此而变为孤立状态.我可以让孩子将服务推送到另一个Thread并让主线程检查父进程id的更改,但这似乎只是复制守护进程功能的很多代码.

是否有人能够深入了解守护程序标志无法正常工作的原因?这在windows8 64位和ubuntu12 32位vm上是可重复的.

流程函数的简化版本如下:

def _serverLaunchHelper(port)
    httpd = SocketServer.TCPServer(("", port), Handler)
    httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

在PySpark中,如何从转换内部登录log4j

我希望在转换过程中记录执行程序内的标准记录器,并保持日志级别和格式.不幸的是,我无法访问方法中的log4j logger对象,因为它不可序列化,并且转换中的spark上下文不可用.我可以在变换之外记录我要触摸的所有对象,但这并不能帮助调试或监视代码执行.

def slow_row_contents_fetch(row):
    rows = fetch_id_row_contents(row) # API fetch, DB fetch, etc
    # This shows up, but not controllable by log level
    print "Processed slow row with {} results".format(len(rows))
    return rows

sc.parallelize(fetchable_ids).flatMap(slow_row_contents_fetch, True)
Run Code Online (Sandbox Code Playgroud)

在转换之外,我可以通过以下方式获取记录器:

logger = sc._jvm.org.apache.log4j.LogManager.getRootLogger()
logger.warn('This will show up as expected')
Run Code Online (Sandbox Code Playgroud)

但是sc,由于充分的理由,在转型中无法获得.如果您尝试直接在转换中调用sc,则会看到以下消息:

例外:您似乎尝试从广播变量,操作或转换引用SparkContext.SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用.有关更多信息,请参阅SPARK-5063.

我可以打印,但这不容易过滤,只是作为未格式化的错误消息跟踪到log4j记录器.

在转换函数中调用记录器时,序列化记录器本身(例外)会失败:

...
File "/usr/lib/python2.7/pickle.py", line 306, in save
    rv = reduce(self.proto)
  File "/usr/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__
  File "/usr/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 36, in deco
  File "/usr/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 304, in get_return_value
py4j.protocol.Py4JError: An …
Run Code Online (Sandbox Code Playgroud)

apache-spark pyspark

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

如何在定义cython扩展之前识别编译器?

我正在构建一个独立于平台的cython项目,我希望根据所使用的编译器传递编译器args.我可以根据平台猜测编译器,或者假设它与Python使用的编译器相同,但不能保证匹配.通常我将cmdclassarg 注入到setuptool的setup方法中并包装install或build_ext命令来检查内部状态.但在这种情况下,我必须在到达包装器之前对扩展模块进行cython化.

在对扩展模块进行cython化之前,有没有办法确定setup.py中的编译器?

setuptools cython

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

使用 Python 在 OpenCv 中设置 ORB 参数

我一直在 Python 中使用 OpenCV 2.4 来匹配两个图像之间的特征,但我想更改“ORB”检测器的参数之一(它提取的特征数量“nfeatures”),似乎没有办法在 Python 中这样做。

对于 C++,您可以通过 FeatureDetector/DescriptorExtractor 的 'read'(或 'load' for java?)方法加载参数 yml/xml 文件。但是 Python 绑定缺少此函数/方法。

它还缺少直接创建 ORB 对象的绑定,因此我无法在那里传递参数(Python 绑定似乎要求您按字符串名称使用 cv2.DescriptorExtractor_create -- 如果您传递错误的字符串名称或参数以及它......此外,该函数不能接受它似乎传递给构造函数的任何其他参数。

我唯一的希望似乎是使用 cv2.cv.Load(filename) 从 xml 加载完整的对象,但这似乎需要一个对象实例而不是算法定义,为此我在新的或旧的中找不到任何 Python 绑定句法。我在文件加载步骤上尝试了几种变体,包括模仿 OpenCV 中保存的 xml 文件的样式,但没有成功。

有没有人在我上面尝试将参数传递到 OpenCV 中的检测器(SURF 或 ORB,或任何通用算法)的步骤之一中取得成功?

这是我用来提取特征的代码:

def findFeatures(greyimg, detector="ORB", descriptor="ORB"):
    nfeatures = 2000 # No way to pass to detector...?
    detector = cv2.FeatureDetector_create(detector)
    descriptorExtractor = cv2.DescriptorExtractor_create(descriptor)
    keypoints = detector.detect(greyimg)
    (keypoints, descriptors) = descriptorExtractor.compute(greyimg, keypoints)
    return keypoints, descriptors
Run Code Online (Sandbox Code Playgroud)

编辑

更改检测器设置似乎只是在 Windows 实现上出现段错误——等待补丁或修复出现在 OpenCV …

python opencv

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

如果列表中的所有项目都不同,我如何定义函数返回False,否则返回True

我试图创建一个检查列表项清晰度的函数,如果没有多个匹配元素,则返回false.

def AllDifferent(s):
    for i in s:
        for i2 in s:
            if i2 == i:
                return False
            else:
                return True
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.我究竟做错了什么?

python for-loop

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

透明 NSButton 显示不想要的背景颜色

所以我NSView在其中以编程方式创建了一些无边框按钮。

虽然我将它们的backgroundColor属性设置为所需的颜色,但它们看起来像是有较深的阴影。

这怎么会发生?

macos objective-c nsview nsbutton swift

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