在R控制台中工作时,我想设置监视特定连接的后台任务,当事件发生时,执行另一个功能(警报).或者,我可以进行设置,以便外部函数只是向R发送警报,但这似乎是同样的问题:有必要设置一个监听器.
我可以在R的专用过程中执行此操作,但我不知道在控制台中是否可行.另外,如果它正在计算一个函数,我对中断R不感兴趣,但是如果控制台只是在等待输入,则警告或中断.
以下是三个用例:
最简单的例子是观看文件.假设我有一个名为"latestData.csv"的文件,我想监视它的变化; 当它改变时,myAlert()执行.(可以将它扩展为执行不同的操作,但只是弹出一个文件已更改的注释是有用的.)
一种不同类型的监视器将监视给定的机器是否在RAM上运行不足并且可能执行save.image()并终止.同样,这可能是一个简单的问题,即观察由外部监视器生成的文件,该文件可以保存输出top或其他命令.
一个不同的例子就像另一个最近的SO问题,关于:让R停止正在运行的EC2机器.如果来自另一台机器或进程的警报告诉程序保存并终止,那么能够监听该警报将是很好的.
目前,我怀疑有两种方法可以解决这个问题:通过Rserve和可能的via fork.如果有人有关于如何使用包或通过其他方法执行此操作的示例,那将是很好的.我认为解决这三个用例中的任何一个都可以解决所有这些问题,模拟一些外部代码.
注1:我意识到,根据另一个SO问题的答案,R是单线程的,这就是我怀疑fork和Rserve可能工作的原因.但是,如果一个人与R终端接口,我不确定可行性.虽然R的REPL附加到控制台的输入,但我试图绕过它或模仿它,这是答案的地方fork或Rserve可能.
注2:对于那些熟悉事件处理/事件处理方法的人来说,这也可以解决所有问题.我在R中找不到任何相关内容.
更新1:我发现编写R扩展的手册有一个引用事件处理的部分,其中提到了使用R_PolledEvents.这很有希望.
我有一个在后台播放音频的应用程序.我正试图beginBackgroundTaskWithExpirationHandler在当前曲目结束时跳到下一首曲目.
以下是播放状态更改时调用的代码.它永远不会记录"beginBG called",即使同一方法中的其他代码在后台成功实现.
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[self ffwButtonPressed:ffwButton];
NSLog(@"beginBG called");
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
Run Code Online (Sandbox Code Playgroud)
ffwButtonPressed调用一些不同的方法来改变轨道.什么时候完成......
UIApplication *app = [UIApplication sharedApplication];
if (bgTask != UIBackgroundTaskInvalid) {
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
NSLog(@"end bgTask");
Run Code Online (Sandbox Code Playgroud)
编辑:声明
UIBackgroundTaskIdentifier bgTask;
Run Code Online (Sandbox Code Playgroud)
编辑:在ViewDidLoad中
bgTask = 0;
Run Code Online (Sandbox Code Playgroud) 让我们说我有一个博客应用程序与帖子.创建帖子后,将创建一个工作程序来处理某些后台操作.我的情况是,在提交帖子表单后,我想显示某种加载消息(gif加载器等),当工作人员完成时,我想隐藏加载消息并显示工作人员提供的一些数据.我的问题是,工人完成工作并将其显示在用户前端的最佳沟通方式是什么.工人回调看起来像这样
def worker_finish
#message the user
end
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中我有一些NSOperation从在线数据库更新一些核心数据元素,有时更新需要一些时间,当iPhone的屏幕锁定时,应用程序进入后台模式,此更新停止,所以我有重新打开应用程序继续更新,所以我搜索了很多堆栈溢出,我找到了一些信息:
beginBackgroundTaskWithExpirationHandler
Run Code Online (Sandbox Code Playgroud)
这是一个来自苹果的方法,当应用程序处于后台模式时,让我们继续执行某项任务,并且我这样做:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}
Run Code Online (Sandbox Code Playgroud)
现在应用程序在后台继续执行任务,似乎一切正常,所以我的问题是,我使用的这种方法是安全的吗?还是有更好的模式?
谢谢
我在iOS 7上的Objective C应用程序在后台从startUpdatingsignificantLocationChanges或startUpdatingLocation委托获取位置更新(哪一个取决于应用程序所处的模式,但我认为不重要).
在委托中,我收集位置信息,将其写入字典,然后将字典写入Firebase.
// this code is in the location update delegate routine
// the code that gathers the various elements that go into the dictionary
// are omitted for clarity, I don't think that they matter
// we may be running in the background on iOS 7 when we are called!
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[[NSNumber numberWithFloat:newLocation.coordinate.latitude] stringValue], @"Latitude",
[[NSNumber numberWithFloat:newLocation.coordinate.longitude] stringValue], @"Longitude",
[[NSNumber numberWithFloat:newLocation.horizontalAccuracy] stringValue], @"Accuracy",
formattedDateString, @"TimeNow",
[dateFormatter stringFromDate:newLocation.timestamp], @"TimeStamp",
[[NSNumber numberWithDouble:interval] stringValue], @"Date",
self.mode, …Run Code Online (Sandbox Code Playgroud) 我想使用后台提取在后台提取HealthStore数据,但我一直收到错误:Error Domain=com.apple.healthkit Code=6 "Protected health data is inaccessible" UserInfo=0x17026fdc0 {NSLocalizedDescription=Protected health data is inaccessible}.
Apple声明:
由于HealthKit存储已加密,因此当手机锁定时,您的应用无法从商店读取数据.这意味着您的应用可能无法在后台启动时访问该商店.
在后台访问数据的任何解决方法?是HKObserverQuery在后台获取数据的唯一方法吗?
我正在使用asp.net mvc-5 Web应用程序,我在使用Hangfire工具运行长时间运行的后台作业时遇到了问题.问题是如果作业执行超过30分钟,那么hangfire会自动启动另一个作业,所以我最终会同时运行两个类似的作业.
现在我有以下内容: -
现在我已经定义了一个每天17:00运行的篝火重复工作.后台作业主要扫描我们的网络中的服务器和虚拟机并更新数据库,定期作业将在完成执行后发送电子邮件.经常性工作在执行时间不到30分钟时效果很好.但是今天随着我们的系统的发展,经常性的工作在40分钟后完成,而不是像过去那样在22-25分钟之后完成.我收到了2封电子邮件,而不是一封电子邮件(电子邮件之间的时间约为30分钟).现在我手动重新运行这个工作,我注意到问题如下: -
"当定期作业达到30分钟连续执行时,定期作业的新实例将启动,因此我将有两个实例而不是同时运行的实例,这就是我收到2封电子邮件的原因."
现在,如果定期工作不到30分钟(例如29分钟),我将不会遇到任何问题,但如果重复执行的工作超过30分钟,那么由于某种原因或其他原因,将启动新工作.虽然当我在执行作业期间访问hangfire仪表板时,我发现只有一个活动作业,当我监视我的数据库时,我可以从sql profiler看到有两个作业访问数据库.这种情况发生在经常性工作开始30分钟后(在我们的案例中是17:30),这就是为什么我收到2封电子邮件,这意味着2个重复工作在后台运行而不是一个.
那么有人可以提出这方面的建议吗,如果目前的重复工作执行时间超过30分钟,我怎么能避免因自动启动新的定期工作而导致绞火?谢谢
我正在尝试使用'StubProvider'和'StubAuthenticator'编写同步适配器,我遵循了官方指南,我的代码运行没有任何错误,但'onPerformSync()'没有被调用,我尝试了一切但没有用.
我的完整项目可以从https://www.dropbox.com/s/48bgj3wweehaieu/MyApplication.zip?dl=0下载
这是我正在使用的类:
类MainActivity
public class MainActivity extends FragmentActivity implements View.OnClickListener {
// Constants
// The authority for the sync adapter's content provider
public static final String AUTHORITY = "com.syncadaptertest.StubProvider";
// An account type, in the form of a domain name
public static final String ACCOUNT_TYPE = "com.syncadaptertest";
// The account name
public static final String ACCOUNT = "dummyaccount";
// Instance fields
Account mAccount;
private ImageButton mRefreshBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRefreshBtn …Run Code Online (Sandbox Code Playgroud) 我是Heroku的新手.我正在努力实现一些简单的事情(至少我希望如此),但似乎没有直接的方法可以做到这一点.
我有几个PHP文件,我试图作为预定的工作(每5分钟)运行.这些运行一些时间可能需要超过30秒才能完成.因此,据我所知,我需要将它们设置为工人工作.
Heroku上给出的示例似乎是一个复杂的示例,我无法理解现有的PHP文件应该如何标记为worker.
另外,我想安排这个工人工作每5分钟运行一次.文档是指自定义时钟,但PHP没有示例.
有人可以指点我一个关于如何使用Worker进程并为他们安排Heroku for PHP程序的教程吗?初学者可以遵循的东西.
谢谢!
这是我的风景。我想使用后台任务向订阅用户发送时事通讯。这是由 MailService 完成的,它具有 UnitOfWork 作为依赖项。
我尝试了docs.microsoft.com 中的解决方案, 因此在我的情况下,我使用 IMailService 方法而不是 ILogger,但出现错误:
System.InvalidOperationException: '不能从单例 >'Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor' 使用范围服务 >'Fit4You.Core.Data.IUnitOfWork'。
我不想让我的 UnitOfWork 或 DbContext 具有单例生命周期。是否有可能以某种方式使用范围为 UnitOfWork 的 MailService 的依赖项?
我知道 IServiceScopeFactory 但可能不知道如何正确使用它。
我正在使用 .NET Core 2.2 并内置接口 IHostedService
范围邮件服务:
public class ScopedMailService : IScopedMailService
{
private readonly IMailService mailService;
public ScopedMailService(IMailService mailService)
{
this.mailService = mailService;
}
public void DoWork()
{
mailService.SendNewsletterToSubscribedUsers();
}
}
Run Code Online (Sandbox Code Playgroud)
消费范围邮件服务:
public class ConsumeScopedMailService : IHostedService
{
private Timer timer;
private readonly IMailService mailService;
public IServiceProvider Services …Run Code Online (Sandbox Code Playgroud) c# dependency-injection background-process background-service asp.net-core-2.2