Ho bisogno di passare il file come argomento all'attività di sedici, ma il file passato è arrivato in qualche modo chiuso. Succede solo nel caso in cui sto eseguendo il compito in modo asincrono. Si tratta di un comportamento previsto?passare l'istanza del file come argomento all'attività di sedici solleva "ValoreErrore: operazione I/O su file chiuso"
guardati:
from engine.tasks import s3_upload_handler
def myfunc():
f = open('/app/uploads/pic.jpg', 'rb')
s3_file_handler.apply_async(kwargs={"uploaded_file" : f,"file_name" : "test.jpg"})
compiti:
def s3_upload_handler(uploaded_file,file_name):
...
#some code for uploading to s3
traceback:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 240, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 437, in __protected_call__
return self.run(*args, **kwargs)
File "/app/photohosting/engine/tasks.py", line 34, in s3_upload_handler
key.set_contents_from_file(uploaded_file)
File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1217, in set_contents_from_file
spos = fp.tell()
ValueError: I/O operation on closed file
registri di fiori:
kwargs {
'file_name': 'test.jpg',
'uploaded_file': <closed file '<uninitialized file>',
mode '<uninitialized file>' at 0x7f6ab9e75e40>
}
significa che non è possibile passare in memoria l'istanza del file all'attività asincrona e dovrei salvarla prima? –
@ValentinKantor se con "salva" intendi "chiudi", allora sì, devi chiudere l'istanza del file –