Ich versuche Tensorflow in einem Sellerie Arbeiter zu verwenden. Ich habe eine Zeitüberschreitung festgestellt, anstatt eine Antwort vom Mitarbeiter zu erhalten.Keine Antwort von Sellerie Arbeiter mit TensorFlow
ich folgende Kode:
tasks.py
from celery import Celery
from celery.signals import worker_init
import tensorflow as tf
app = Celery('tasks', backend='redis://localhost:6379/0', broker='redis://localhost:6379/0')
class TFModel():
def __init__(self):
self.sess = tf.Session()
def run(self):
return self.sess.run(tf.constant('hello'))
tf_model = None
@worker_init.connect
def on_worker_init(**_):
global tf_model
tf_model = TFModel()
print(tf_model.run())
return
@app.task(time_limit=10)
def run():
return tf_model.run()
test.py
import time
from tasks import run
r=run.delay()
while not r.ready():
time.sleep(2)
print(r.get())
ich einen Arbeiter mit diesem Befehl ausgeführt.
$ celery -A tasks worker -l info -c 1
Als ich den Arbeiter ausgeführt wurde hello
ausgedruckt, da on_worker_init()
print(tf_model.run())
hatte. Dies bedeutet, dass Tensorflow ordnungsgemäß funktioniert.
Dann lief ich:
$ python test.py
Dann bekam ich:
celery.backends.base.TimeLimitExceeded: TimeLimitExceeded(10,)
Was war falsch? Wie kann ich untersuchen, was passiert ist?
Meine Umgebung ist:
python 3.5.1
tensorflow 0.11.0
celery 4.0.2
Dank.
Dank für Ihre Antwort danken! Benutzt du Keras? Ich frage mich, warum sess.run() nicht mit Sellerie arbeitet. – Kumon
Ich benutze Tensorflow direkt, also kein Keras, Initialisierung des Netzwerks erfolgt im Konstruktor. Session.run ohne Probleme in tf_model.process_single verwenden. – Cospel
Beachten Sie, dass ich @ worker_process_init.connect() und nicht @worker_init verwende. Versuchen Sie auch, etwas zu drucken/zu protokollieren, damit Sie sehen können, ob Ihr Modell richtig geladen ist. – Cospel