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呢?
请解释.
我有一个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) 我希望在转换过程中记录执行程序内的标准记录器,并保持日志级别和格式.不幸的是,我无法访问方法中的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) 我正在构建一个独立于平台的cython项目,我希望根据所使用的编译器传递编译器args.我可以根据平台猜测编译器,或者假设它与Python使用的编译器相同,但不能保证匹配.通常我将cmdclassarg 注入到setuptool的setup方法中并包装install或build_ext命令来检查内部状态.但在这种情况下,我必须在到达包装器之前对扩展模块进行cython化.
在对扩展模块进行cython化之前,有没有办法确定setup.py中的编译器?
我一直在 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 …
我试图创建一个检查列表项清晰度的函数,如果没有多个匹配元素,则返回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)
但它似乎没有用.我究竟做错了什么?
所以我NSView在其中以编程方式创建了一些无边框按钮。
虽然我将它们的backgroundColor属性设置为所需的颜色,但它们看起来像是有较深的阴影。

python ×3
activerecord ×1
apache-spark ×1
cython ×1
for-loop ×1
macos ×1
nsbutton ×1
nsview ×1
objective-c ×1
opencv ×1
pyspark ×1
ruby ×1
setuptools ×1
swift ×1