我试图了解将.pyc文件与Python包一起包含在AWS Lambda中的确切效果.
我能够找到的极少数参考文献说没有必要在包中包含.pyc文件.但是,当我不包含这些文件时,我看到我的Lambda函数会有巨大的性能损失.
尝试在我的软件包中包含一个库(例如Jinja2),当省略它的.pyc文件时,它所用的时间import jinja2
总是超过3秒.
当我提供.pyc文件时,第一次执行仍然需要3秒,但之后,它会下降到100-200ms(我想直到函数最终被卸载?).
我发现这个问题可能表明AWS Lambda无法保存自己编译的文件,这有意义吗?
我的问题是 - 是否有关于AWS Lambda上使用Python的.pyc文件的明确信息来源?有没有办法让AWS Lambda保存自己的.pyc文件?或者我应该继续将它们包含在我的包装中?
我正在开发一个Mac应用程序,它使用NSOpenPanel提示用户输入文件.应用程序是沙箱(在OSX 10.9.4上测试).我注意到如果我打开大量文件(~3000),打开的面板会开始向日志发出错误.如果我尝试在chucks中打开少量文件多次,也会发生这种情况.
在第一次出现错误之后,每次再次使用NSOpenPanel打开文件时,无论文件数量多少,都会再次生成这些错误(直到应用程序关闭).
错误消息如下所示:
TestPanel[98508:303] __41+[NSSavePanel _consumeSandboxExtensions:]_block_invoke: sandbox_consume_fs_extension failed
Run Code Online (Sandbox Code Playgroud)
我试图打开的每个文件一行.
我设法用一个简单的应用程序重现这种行为:一个带有单个按钮的沙盒应用程序调用以下代码:
NSOpenPanel* panel = [NSOpenPanel openPanel];
[panel setAllowsMultipleSelection:YES];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
[panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) {
NSLog(@"%lu", [panel.URLs count]);
}];
Run Code Online (Sandbox Code Playgroud)
错误出现在代码到达完成处理程序之前.
似乎我仍然可以从完成处理程序中的面板中获取URL,但它确实污染了系统日志.
编辑:
似乎此问题与NSOpenPanel/NSSavePanel面板没有直接关系.使用drap/drop with files时会发生非常类似的事情.像这样的东西:
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
...
NSPasteboard *pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSURLPboardType]) {
NSArray *urls = [pboard readObjectsForClasses:@[[NSURL class]] options:nil];
}
...
}
Run Code Online (Sandbox Code Playgroud)
拖动大量文件时会生成以下日志消息("魔术"数字似乎在2900左右):
Consume sandbox extension for itemIdentifier (2937) from pasteboard failed!
Run Code Online (Sandbox Code Playgroud)
与NSOpenPanel一样,在第一次出现之后,每个丢弃的文件都会在日志中生成相同的错误.
编辑2:
@mahal tertin的回复向我指出了正确的方向.问题确实存在于文件数量和安全范围URL资源有限的事实上.
但是,似乎找不到合理的解决方案.问题是,当用户在NSOpenPanel上单击"确定"(或删除拖放感知控件上的文件)时,操作系统已经尝试创建这些安全范围的URL并隐式调用startAccessingSecurityScopedResource
您.因此,如果用户尝试打开的文件超过限制,则资源将耗尽,唯一的选择是关闭并重新启动应用程序. …
我正在使用 AV Foundation 处理来自摄像机的帧(iPhone 4s、iOS 6.1.2)。我正在根据 AV Foundation 编程指南设置 AVCaptureSession、AVCaptureDeviceInput、AVCaptureVideoDataOutput。一切都按预期进行,我能够在captureOutput:didOutputSampleBuffer:fromConnection:
代表中收到帧。
我还有一个这样的预览图层集:
AVCaptureVideoPreviewLayer *videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
[videoPreviewLayer setFrame:self.view.bounds];
videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer insertSublayer:videoPreviewLayer atIndex:0];
Run Code Online (Sandbox Code Playgroud)
问题是,我的帧处理不需要每秒 30 帧,而且无论如何我也无法如此快地处理它们。所以我使用此代码来限制帧持续时间:
// videoOutput is AVCaptureVideoDataOutput set earlier
AVCaptureConnection *conn = [videoOutput connectionWithMediaType:AVMediaTypeVideo];
[conn setVideoMinFrameDuration:CMTimeMake(1, 10)];
[conn setVideoMaxFrameDuration:CMTimeMake(1, 2)];
Run Code Online (Sandbox Code Playgroud)
这工作正常并限制captureOutput委托接收的帧。
但是,这也限制了预览层的每秒帧数,并且预览视频变得非常无响应。
我从文档中了解到,帧持续时间是在连接上独立设置的,并且预览层确实具有不同的 AVCaptureConnection。检查混合/最大帧持续时间[videoPreviewLayer connection]
表明它确实设置为默认值(1/30 和 1/24),并且与 AVCaptureVideoDataOutput 连接上设置的持续时间不同。
那么,是否可以仅在帧捕获输出上限制帧持续时间,而在预览视频上仍然看到 1/24-1/30 帧持续时间?如何?
谢谢。
我正在使用其他问题和在线建议的 JSDoc 重载语法,不确定我是否正确,但这里是:
/**
* @param {string} param
* @returns {'string result'}
*//**
* @param {number} param
* @returns {'number result'}
*/
function overloaded(param) {
switch (typeof param) {
case 'string': return 'string result';
case 'number': return 'number result';
}
throw new Error(`Invalid type: ${typeof param}`);
}
overloaded('seven');
overloaded(7);
Run Code Online (Sandbox Code Playgroud)
string result
如果输入参数的类型为 ,则此函数应准确返回,如果输入参数的类型为string
,则应number result
准确返回number
。在普通的 TypeScript 中,这将是:
function overloaded2(param: string): 'string result';
function overloaded2(param: number): 'number result';
function overloaded2(param: string | number): 'string result' | …
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我需要响应自定义NSView中的触控板触摸事件(touchesBeganWithEvent / touchesMovedWithEvent / touchesEndedWithEvent),我的代码可以正常工作。但是,当触摸开始时光标位于视图之外并且在这种情况下NSView不会收到这些事件时,我也需要这样做。
我正在探索的一个方向是子类化NSApplication并覆盖sendEvent。但是我不确定如何将适当的消息发送到我的NSView。仅仅通过sendEvent将这些事件转发到NSWindow似乎不起作用。
或者,还有更好的方法?有任何想法吗?
谢谢。
我想要一个需要接受一些用户输入的窗口,为此我有以下内容:
NSWindow
从 nib 加载NSWindowController
,这也是它的委托NSTextField
与NSNumberFormatter
NSTextField
' 被绑定到 中的整数属性NSWindowController
(为了简单起见,我没有使用NSObjectController
它,但可以根据需要添加它)NSButton
以接受更改并关闭窗口windowShouldClose:
方法中进行最终验证并决定是否可以关闭窗口我想要实现的目标非常简单,但 Cocoa 坚持让这个变得具有挑战性:
NSTextField
应该只接受一个数字作为其最终值,该值也大于零够简单的。NSNumberFormatter 应该已经涵盖了大部分任务,并且与绑定一起,这应该很容易实现。
问题#1:
我找不到一种方法来更改当NSTextField
失去焦点时在警报中向用户显示的错误消息,并且该值不正确,而是更具描述性。有什么办法可以做到这一点吗?或者我需要以某种方式实现我自己的 NSFormatter ?
问题#2:
当用户更改 中的值NSTextField
并单击“完成”按钮时,Cocoa 不会将此视为更新NSTextField
绑定模型值的触发器。这可能是标准的 OSX 行为,但没有任何意义。
我能够通过调用[window makeFirstResponder:nil]
“完成”按钮的操作来强制NSTextField
失去焦点并更新值来解决此问题,但我想知道这是否是实现此目的的正确方法。
问题#3:
这就是我真正摸不着头脑的地方。如果用户在 中输入不正确的值(例如非整数)并NSTextField
单击“完成”按钮,则验证不会启动,并且NSTextField
在模型未更新时将继续具有不正确的值。
我希望仍会显示“无效”警报,并且我有一些地方可以插入代码来决定是否关闭窗口,但我找不到任何方法来覆盖此行为。
达到这些要求的标准做法应该是什么?我是否应该放弃格式化程序和/或绑定,而只是使用操作手动完成这一切?
我正在尝试构建一个应用程序,允许用户使用可以调整大小的矩形边框来指定图像的多个区域.
到目前为止,我有一个NSScrollView
包含一个,NSImageView
所以用户可以放大图像并按需要滚动.我目前的想法是,我可以使用NSViews
一种方式来提供一个边界框,用户可以定位和调整大小以覆盖所需的区域,将NSView
帧转换为图像大小的百分比,然后存储这些值以供以后使用.
有一种addAreaToImage
方法可以添加NSView
到NSScrollView
用户当前所在位置的中心位置.我想要的是让用户能够点击并拖动该区域的角落,以便在任何他们想要的地方调整大小/移动它.如果愿意,可以选择一个实时边界框.
阅读完文档之后,与拖动相关的大部分内容都是让NSView成为拖动其他内容(如图像)或调整大小的地方,因为调整了superview,这些都不是我想要做的.
我担心的是,这个问题的答案(或一组能够让我能够推出自己的解决方案的答案)是如此基本,以至于没有人想到它们,谷歌的最后几天几乎已经确认了为了我.
我来自iOS开发,所以这不是一个全新的领域,但NSView和UIView似乎有足够的差异到目前为止彻底迷惑我.
在 Swift 3 中,dispatch_once 函数被移除,迁移指南建议使用初始化闭包:
let myGlobal = { ... global 在对闭包的调用中包含初始化 ... }()
_ = myGlobal // 使用 myGlobal 将仅在第一次使用时调用初始化代码。
我想从初始化闭包中访问“self”实例变量,如下所示:
class SomeClass {
var other = SomeOtherClass()
let initialize: () = {
// self.other - this doesn't work, complains about unresolved identifier 'self'
// how to access self.other here?
} ()
func doSomething() {
// initialize will only be called once
initialize
}
}
Run Code Online (Sandbox Code Playgroud)
为什么在闭包中无法访问“自我”,以及如何使其成为?
在 Google 为其 API 提供的各种 javascript 示例(例如此处)中,他们使用以下代码从 html 加载脚本:
<script async defer src="https://apis.google.com/js/api.js"
onload="this.onload=function(){};handleClientLoad()"
onreadystatechange="if (this.readyState === 'complete') this.onload()">
</script>
Run Code Online (Sandbox Code Playgroud)
我的理解是async/defer
告诉浏览器什么时候加载和执行脚本并且彼此有些矛盾。我有几个问题:
async
和是什么意思defer
?onload
事件中,为什么他们function(){};
在调用之前先为事件分配一个空函数 ( ) handleClientLoad()
?谢谢。
objective-c ×5
cocoa ×4
macos ×4
javascript ×2
avfoundation ×1
aws-lambda ×1
browser ×1
cocoa-touch ×1
google-api ×1
ios ×1
jsdoc ×1
performance ×1
python ×1
sandbox ×1
svg ×1
swift ×1
swift3 ×1
typescript ×1