我正在寻找一种在Clojure中定期调用函数的简单方法.
JavaScript setInterval有我想要的那种API.如果我在Clojure中重新构想它,它看起来像这样:
(def job (set-interval my-callback 1000))
; some time later...
(clear-interval job)
Run Code Online (Sandbox Code Playgroud)
出于我的目的,我不介意这是创建一个新线程,在线程池或其他东西中运行.时机也是准确的并不重要.事实上,提供的时间段(以毫秒为单位)可能只是一个呼叫结束和下一个呼叫开始之间的延迟.
我在我的应用程序中使用GcmNetworkManager进行定期和任务任务执行之一.我收到这两个错误,无法弄清楚原因.实施是正确的,因为我无法在登台时重现这些问题.
Fatal Exception: java.lang.RuntimeException: Package manager has died
at android.app.ApplicationPackageManager.queryIntentServicesAsUser(ApplicationPackageManager.java:700)
at android.app.ApplicationPackageManager.queryIntentServices(ApplicationPackageManager.java:706)
at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
&
Caused by java.lang.IllegalArgumentException: There is no GcmTaskService component registered within this package. Have you extended GcmTaskService correctly?
at com.google.android.gms.common.internal.zzx.zzb(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.zzdi(Unknown Source)
at com.google.android.gms.gcm.GcmNetworkManager.schedule(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
谢谢
PS:设备具有8.1+的播放服务.
android scheduling job-scheduling periodic-task gcm-network-manager
如果应用程序在前台,后台运行或被杀死,该应用程序会显示预期的行为.但是,一旦重新启动,PeriodicTask停止运行
以下是相关的代码:
在AndroidManifest:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<service android:name=".tracking.MyTaskService"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
PeriodicTask配置:
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(30L)
.setFlex(10L)
.setExtras(bundle)
.setPersisted(true)
.build();
mGcmNetworkManager.schedule(task);
Run Code Online (Sandbox Code Playgroud)
在Logcat中,我得到以下内容:
E/NetworkScheduler.TED: Couldn't start service: Intent
{ act=com.google.android.gms.gcm.ACTION_TASK_READY
cmp=xxx.xxxxxx.xxx/.tracking.MyTaskService (has extras)
}
Run Code Online (Sandbox Code Playgroud)
附加所有相关细节:
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.example.gcmnetworkmanagerquickstart">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- [START manifest_service] -->
<service
android:name=".MyTaskService"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"> …Run Code Online (Sandbox Code Playgroud) android google-cloud-messaging periodic-task gcm-network-manager
我有一个简单的周期性任务:
from celery.decorators import periodic_task
from celery.task.schedules import crontab
from .models import Subscription
@periodic_task(run_every=crontab(minute=0, hour=0))
def deactivate_subscriptions():
for subscription in Subscription.objects.filter(is_expired=True):
print(subscription)
subscription.is_active = False
subscription.can_activate = False
subscription.save()
Run Code Online (Sandbox Code Playgroud)
我想用测试来覆盖它。
我找到了有关如何测试简单任务的信息,例如@shared_task,但我找不到测试的示例@periodic_task
我想开始Django使用Celery. 以下是我的项目的相关部分:
# celery.py
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bookProjectSetting.settings')
app = Celery('bookProjectSetting')
# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
Run Code Online (Sandbox Code Playgroud)
该 …
在测试关于以下递归关系的猜想
,
为数字序列声称某种类型的周期性,我写了一个python程序,它计算序列并将它们打印在一个表中.
1 # Consider the recursive relation x_{i+1} = p-1 - (p*i-1 mod x_i)
2 # with p prime and x_0 = 1. What is the shortest period of the
3 # sequence?
4
5 from __future__ import print_function
6 import numpy as np
7 from matplotlib import pyplot as plt
8
9 # The length of the sequences.
10 seq_length = 100
11
12 upperbound_primes = 30
13
14 # Computing a list of prime numbers up …Run Code Online (Sandbox Code Playgroud) 我有一个小程序需要每5分钟执行一次.
现在,我有一个执行该任务的shell脚本,但我想提供给没有通过CLI中键附加脚本运行它的用户的能力.
实现这一目标的最佳方法是什么?
我一直在尝试在 Django 中创建定期任务,但有很多版本限制并且没有明确的解释。
我最近实现了一个自动回复包含任意主题标签的推文的系统.该系统包括定期抓取Twitter的流程和定期回复这些推文的流程.遵循我公司的传统,这些定期工作通过RDMS上的工作表实现,其具有状态列,其具有诸如"等待","处理"或"成功"的值.为了确保冗余,我通过利用低级别锁来运行多个相同的进程.
我的问题是,我正在周期性地实施RDMS中工作表的作业,这些作业通常是如何实现的.
我已经阅读了所有可用的官方文档(令人惊讶的是并不是很多),而我所能得到的周期性任务就是这段代码
.setRecurring(true)
// start between 0 and 60 seconds from now
.setTrigger(Trigger.executionWindow(0, 60))
Run Code Online (Sandbox Code Playgroud)
我知道这.setRecurring使得这项工作是周期性的,并trigger使它以60秒的间隔开始,但第二次执行该怎么办?这是否意味着第二次从第一次开始也会执行60秒?
这不可能是真的,因为即使考虑到后台活动的优化以及服务运行的时间比他们预期的要晚一些,编程60秒,而工作大约在5/10/20分钟后运行太多了差异.官方文件说,差异是几秒钟,也许几分钟不超过20分钟.
基本上,我的问题是,这 .setTrigger(Trigger.executionWindow(0, 60))真的意味着这段时间是60秒还是我开始犯这个错误?
android android-service periodic-task android-background firebase-job-dispatcher