2016-07-13 1 views
1

Je rencontre des problèmes lors de l'écriture d'un programme d'E/S asynchrone. Ce que j'essaye de réaliser est: vider des données de json dans un dossier temporaire ainsi je peux employer alors le sous-processus pour créer une archive de ce dossier (avec des données de json). Cependant j'ai compris que j'essaye de taper un fichier vide de tempfile.NamedTemporatyFile.Fichiers d'archive d'E/S torsadées

serialized_data = {'a': 1} 

    temp_file = tempfile.NamedTemporaryFile(dir='.', prefix='serialized_', suffix='.json') 
    temp_file.write(json.dumps(serialized_data)) 

    arch_name = temp_file.name + '.tar.gz' 
    tar_cmd_args = ['tar', '-czf', arch_name, temp_file.name] 
    subprocess.call(tar_cmd_args) 
    #d = threads.deferToThread(subprocess.call, tar_cmd_args) 

J'essaie d'éviter d'E/S autant que possible que je ne veux pas bloquer la chaîne de rappel et je dois être sûr que ces opérations sont thread-safe. Ou est une autre façon de résoudre mon problème? Je veux vraiment éviter json.dump(serialized, file_name)

[modifier]

Tout temp_file.close() causé: tar: /home/bartosz/Documents/serialized_mnaFP_.json: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors

La solution a pas de fermer le dossier, mais pour débusquer. temp_file.flush()

create & read from tempfile

Répondre

0

Fermez le fichier une fois que vous écrivez et avant de lancer le thread secondaire.

+0

Maintenant, je suis en train: 'tar: Retrait principal/de membre names' ' tar: /home/bartosz/Documents/serialized_mnaFP_.json: Impossible stat: Aucun fichier ou directory' 'tar: avec Sortie état d'échec dû à des erreurs précédentes et il n'y a aucun fichier dans l'archive maintenant, pas même un vide comme précédent – heniek