我正在使用sidekiq gem来处理Rails中的后台作业.出于某种原因,这项工作在一段时间后就会挂起 - 这个过程要么变得反应迟钝,要么出现top但没有多少,或者神秘地消失,没有错误(没有报告给airbrake.io).
有没有人有这方面的经验?
我有一个应用程序需要每24小时与服务器通信(刷新它的数据).即使应用程序未打开也不在后台,这种情况需要发生.
理想情况下我喜欢的是:
这有可能吗?
应用程序是否仅在用户点击通知后被唤醒?或者我可以在显示通知之前运行一些代码吗?我甚至可以丢弃通知消息吗?
如果推送通知不是正确的方法,那么???
多谢你们!
我熟悉用于处理后台工作的php-resque和其他工作处理系统,但我不认为它会做我需要的工作.
在这种情况下,我有一个传入的Web服务请求,需要对外部系统执行多个(2-4)独立调用,并返回到客户端的综合响应.每个标注可能需要300-500ms,因此我希望每个标注并行执行,以便整个过程不超过500ms +/-总计.
我的php-resque和其他系统的问题是等待甚至1秒开始发出这些标注太长时间不能等待,我正在考虑另一种方法.
我在想什么:
当然,我们会为每个请求和整个过程实施超时...
思考?我错了吗?php-resque几乎可以立即启动多个并行工作吗?
这就是我想要实现的目标:
这可能吗?因为要在后台真正运行它,我们不必在将其标记为后台进程之前进行重定向吗?或者有一些技巧可以解决这个问题吗?
当使用python的sh模块(不是stdlib的一部分)时,我可以将路径中的程序作为函数调用并在后台运行它:
from sh import sleep
# doesn't block
p = sleep(3, _bg=True)
print("prints immediately!")
p.wait()
print("...and 3 seconds later")
Run Code Online (Sandbox Code Playgroud)
我可以使用sh的Command包装并传入可执行文件的绝对路径(如果可执行文件不在我的路径中或者包含诸如此类的字符,则会有帮助.):
import sh
run = sh.Command("/home/amoffat/run.sh")
run()
Run Code Online (Sandbox Code Playgroud)
但是尝试在后台运行包装的可执行文件,如下所示:
import sh
run = sh.Command("/home/amoffat/run.sh", _bg=True)
run()
Run Code Online (Sandbox Code Playgroud)
失败并出现回溯错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() got an unexpected keyword argument '_bg'
Run Code Online (Sandbox Code Playgroud)
如何sh.Command在后台运行包装的可执行文件?寻找一个优雅的解决方案.
编辑:
我使用python解释器来测试传递_bg给命令(而不是包装器),我现在意识到这是测试阻塞和非阻塞进程的一种不好的方法:
>>> import sh
>>> hello = sh.Command("./hello.py")
>>> hello(_bg=True) # 5 second delay …Run Code Online (Sandbox Code Playgroud) 我很想知道当进程具有输入/输出重定向以在后台运行进程时,代码中使用'&'运算符是否有所不同
在后台运行流程方面,这些代码行之间有什么区别?如果有,我如何确定差异将是什么?
setsid python script.py < /dev/zero &> log.txt &
setsid python script.py < /dev/zero & > log.txt &
setsid python script.py < /dev/zero > log.txt &
setsid python script.py & < /dev/zero > log.txt
Run Code Online (Sandbox Code Playgroud) 我正在开发一个我需要支持连续后台应用程序执行的应用程序.我可以使用Apple的可用后台模式继续通信.但是当应用程序处于后台(或未运行)并安装更新版本的应用程序时面临一个问题,之后,centralManager委托已停止运行.所以我不确定是否可以在应用更新后恢复CentralManager状态?
如果它不可能那么还有其他选项(或补丁;))可用?
另一种方法是发送静默推送通知以启动后台运行的应用程序(但为此,我们必须在所有设备上安装新应用程序版本后立即发送静默通知).
当按下主页按钮时,我的应用程序变为非活动状态,然后转到后台,但我的功能仍在执行:
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
// SOME LONG CODE (parse a NSXMLParse)
})
})
Run Code Online (Sandbox Code Playgroud)
但是当我按下Home按钮时出现错误并且我的功能"中断"(未完成,只是删除):
DATE应用程序的名称[498:53974]** - [UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:]**unhandled action - > {handler = remote; info = {(1)= 5; }; }
所以我测试了这样的东西:首先,按下主页按钮,然后按下锁定按钮.这样我就不会得到错误,一切都好.
当我的应用程序处于活动状态时按下锁定按钮时,我只有这个错误,并且在应用程序变为非活动状态和背景之前发生此错误
我正在使用iOS 9和Xcode 7 beta 5,swift 2
我搜索了堆栈溢出,找不到为我的应用程序检测此设置的答案.在Android Marshmallow中,"设置"中有一个选项:
设置 - >数据使用 - >我的应用程序 - >切换"限制应用程序后台数据","禁用蜂窝网络上的后台数据"
我想警告用户是否在我的应用程序中设置了此项.如何检测是否为我的应用设置了此项.任何指针赞赏.