Help me een taakplanningfunctie implementeren in mijn Django-toepassing met Django-Q.
description
Het implementeren van een taakplanningsfunctie kan de responsiviteit van je toepassing aanzienlijk verbeteren door taken op de achtergrond te verwerken, wat de gebruikerservaring en systeemefficiëntie verbetert.
prompt
try_prompt
Ik wil een taakplanningsfunctie instellen in mijn Django-toepassing met Django-Q om achtergrondtaken efficiënt te beheren. Beschrijf mijn huidige p ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Uw huidige projectopzet bestaat uit Django 3.2 en Django-Q 1.3 voor achtergrondtakenbeheer. U wilt een taakplanningsfunctie implementeren om bepaalde taken automatisch en efficiënt te laten uitvoeren. U bent van plan om specifieke taken te plannen die dagelijks moeten worden uitgevoerd.
provider: deepseek
model: deepseek-chat
Voor het instellen van Django-Q in je Django 3.2 project met versie 1.3.9 voor dagelijkse taakplanning, volg deze stappen:
### 1. Installatie en Basisconfiguratie
Voeg toe aan `settings.py`:
```python
INSTALLED_APPS = [
...
'django_q',
]
Q_CLUSTER = {
'name': 'DjangoQProject',
'workers': 4,
'recycle': 500,
'timeout': 60,
'compress': True,
'save_limit': 250,
'queue_limit': 500,
'cpu_affinity': 1,
'label': 'Django Q',
'redis': {
'host': '127.0.0.1',
'port': 6379,
'db': 0,
}
}
```
### 2. Maak een Taakfunctie
Bijvoorbeeld in `tasks.py`:
```python
from django.core.mail import send_mail
def dagelijkse_backup():
# Je backup logica hier
return "Backup voltooid"
def wekelijkse_rapportage():
# Rapportage logica
send_mail('Wekelijkse Rapport', 'Rapport inhoud...', 'from@example.com', ['to@example.com'])
```
### 3. Plan Taken via Django Admin
- Run `python manage.py migrate`
- Start cluster: `python manage.py qcluster`
- Ga naar `/admin/django_q/schedule/` en voeg schedules toe:
**Voorbeeld dagelijkse taken:**
- **Naam**: Dagelijkse Database Backup
- **Functie**: `app.tasks.dagelijkse_backup`
- **Schema Type**: Dagelijks
- **Volgende Uitvoering**: Kies starttijd
- **Naam**: Wekelijkse Email Rapport
- **Functie**: `app.tasks.wekelijkse_rapportage`
- **Schema Type**: Wekelijks
- **Dagen**: Maandag
- **Volgende Uitvoering**: Kies tijdstip
### 4. Alternatief: Programmatisch Plannen
```python
from django_q.models import Schedule
from django.utils import timezone
Schedule.objects.create(
func='app.tasks.dagelijkse_backup',
schedule_type=Schedule.DAILY,
repeats=-1, # Oneindig herhalen
next_run=timezone.now() + timezone.timedelta(hours=24)
)
```
### 5. Specifieke Uitvoeringstijden
Voor precieze tijden gebruik je `next_run` met:
```python
import datetime
from django.utils import timezone
# Elke dag om 02:00
next_run = timezone.now().replace(hour=2, minute=0, second=0, microsecond=0)
```
### 6. Controle
- Monitor taken via Django Admin
- Bekijk logs met `python manage.py qmonitor`
- Controleer cluster status: `python manage.py qinfo`
### Aanbevelingen:
- Gebruik Redis als broker voor productie
- Test taken eerst handmatig via `python manage.py shell`
- Stel juiste timezone in `settings.TIME_ZONE`
- Overweeg error handling in je taakfuncties
Je taken zullen nu automatisch uitgevoerd worden volgens het ingestelde schema!

