2017-09-23 3 views
0

Je suis nouveau à python, également le céleri j'ai commencé à utiliser aujourd'hui seulement, je suis en train de lire un fichier de mise à jour périodiquement je l'ai utilisé ces: Reading from a frequently updated file, Python - Reading from a text file that is being written in Windows et Read from a log file as it's being written using python mais ils n'ont même pas lu le fichier et encore moins périodiquement !!django: lire le fichier ACTUALISATION Périodiquement et données montrent sous forme

Mon point de vue est le suivant:

def myView(request): 
title = 'Algorithms' 
if request.method == 'GET': 
    template = 'algoInput.html' 
    form = AlgoInputForm() 
    context = {'title': title, 'form': form} 

if request.method == 'POST': 
    form = AlgoInputForm(request.POST, request.FILES) 
    if form.is_valid(): 
     task = configAndRun(form.cleaned_data) 
     output = readFile.delay('algorithms/out-file.txt') 

     template = 'result.html' 
     result = AlgoResult(initial={'outputData': output}) 
     context = {'title': title, 'form': form, 'result': result} 

return render(request, template, context) 

Au-dessus configAndRun méthode utilisation sous-processus pour exécuter une tâche longue qui crée un fichier, vous pouvez l'imaginer comme ping google où toute la production va à un fichier. La méthode suivante readFile lit ce fichier et affiche la sortie. Son une tasks.py de céleri comme suit:

from celery import shared_task 

@shared_task 
def readFile(file): 
try: 
    file = open(file, "r") 
    loglines = follow(file) 
    data = [] 
    for line in loglines: 
     data.append(line) 
    return data 
except Exception as e: 
    raise e 

def follow(thefile): 
    thefile.seek(0,2) 
    while True: 
     line = thefile.readline() 
     if not line: 
      time.sleep(0.1) 
      continue 
     yield line 

Ma forme est:

class AlgoInputForm(forms.Form): 
    epoch = forms.IntegerField(label='Epoch', help_text='Enter Epoch.') 
    learnRate = forms.IntegerField(label='Learning rate(η)', help_text='Enter Epoch.') 
    miniBatch = forms.IntegerField(label='Mini-batch size(B)', help_text='Enter Mini-batch size.') 
class AlgoResult(forms.Form): 
    outputData = forms.CharField(label='Evaluation Results', required=False,widget=forms.Textarea(attrs={'rows': 30, 'cols': 80, 'readonly': 'readonly'})) 

mon celery.py est:

from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'WebApp.settings') 

app = Celery('WebApp') 

app.config_from_object('django.conf:settings', namespace='CELERY') 

app.autodiscover_tasks() 

@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

Quand je lance ce projet je reçois quelque chose comme 5997dad7 -c1b9-4258-8f4d-8e45ebcf1c78 en tant que sortie sur mon formulaire AlgoResult.

Pouvez-vous s'il vous plaît me donner les directions. Un code sera apprécié

Répondre

0

Ce que vous voyez dans votre formulaire est en fait le céleri TASK_ID

Vous ne pouvez pas attendre la forme statique Django à se comporter de manière asynchrone et le suivi de votre exécution de la tâche et mettre à jour avant lui-même.

Vous devriez avoir un moyen de mise à jour asynchrone de votre frontend en implémentant l'une des techniques (WebSockets, long pooling, etc.)