-2
votes

Comment exécuter une fonction Python qui gère des fichiers en arrière-plan?

J'ai essayé d'exécuter une fucntion de manutention de fichier en python dans un fil d'arrière-plan à l'aide de la bibliothèque de threading par défaut, mais l'onglet Chrome attend toujours que l'API a terminé le traitement. Ive essayé filetage et multiprocession sans chance

Voici un extrait: xxx


3 commentaires

Vous devez vous expliquer plus clairement. Qu'est-ce que vous essayez de faire exactement? Pour moi, il semble que vous ayez besoin d'un processus de course d'arrière-plan, pas un fil. Et postez votre code aussi.


Re, "J'ai essayé ..." probablement personne ne peut vous aider si vous ne montrer ce que vous avez essayé. Mettez du code dans la question et expliquez ce que vous pensiez que cela ferait. Re, "... sans chance," Qu'est-ce que cela signifie? Y avait-il un message d'erreur? Mettez le message d'erreur dans votre question. Est-ce que cela se comportait d'une autre manière que vous ne comprenez pas? Dites-nous ce qu'il a fait. Indiquez des échantillons de bûches ou d'autres sorties de votre programme qui ne vous conviennent pas.


ive a mis à jour la question avec un extrait, désolé pour le mauvais écrit plus tôt


3 Réponses :


0
votes

Je ne suis pas sûr que si je vous comprends correctement. Si vous voulez simplement exécuter une application dans un arrière-plan et que vous travaillez sur Linux, vous pouvez par exemple.

  1. Exécutez le script Python avec NOHUP . Par exemple. nohup python3 myscript.py
  2. Si votre système utilise SystemD , vous pouvez écrire un service qui vous exécutera un script. Ensuite, vous pouvez également le rendre automatique avec le système. Plus d'information: https://wiki.archlinux.org/index.php/systemd

4 commentaires

J'ai un site Web de flacon et lorsque j'appelle l'API, il appelle une autre fonction. Je veux faire fonctionner cette fonction intérieure en arrière-plan


Ok, alors le filetage devrait faire le travail. Pourriez-vous coller comment vous avez implémenté votre fonctionnement avec un enfilage?


@KUSHSINGH: Modifiez votre Q et ajoutez cette information sur certaines plus de clarifications. Mais je ne vois pas comment cela est connecté à l'onglet Crone comme vous l'avez mentionné.


Désolé pour le désagrément, j'ai ajouté un extrait



0
votes

Je dois avoir envie de faire ce xxx

est-ce correct?

Si cela est correct, vous pouvez également utiliser "Nohup" car Nano_Developer vous a dit, et exécutez votre code sans que votre session (c'est la bonne voie), vous devez le faire à partir de la ligne de commande: xxx

J'espère que cela aide. < / p>


2 commentaires

Merci pour la direction! J'ai utilisé piscine.Apply_ASync pour atteindre la procédure souhaitée.


@KUSHSINGH: Mise en œuvre de ce que vous voulez avec multiprocession ait un potentiel de gâcher votre serveur. Vous attendez de toute façon le traitement pour terminer, donc vous gagnez essentiellement rien.



0
votes

Maintenant, il est clair ce que vous voulez.

Pour enregistrer votre fichier sans délai, votre processus d'épargne doit aller sur le threading.thread (). Pas reconnaissant, voire mieux, tout ensemble.

En outre, vous devriez examiner la documentation de la méthode * .save (), elle peut également prendre en charge la voie non bloquante déjà. Le problème est que la façon dont le transfert de données est effectué, vous aurez un délai, au moins du côté du client pendant que des données sont affichées sur le serveur. L'écriture sur le disque est ici ici un goulot de bouteille considérablement plus petit.

Ce que vous pouvez essayer est d'écrire une fonction distincte qui reçoit l'objet de la demande ou l'objet de fichier comme argument. Dans cette fonction, vous mettez l'épargne et toutes les actions de traitement des fichiers. Puis dans votre flacon routé vous Démarrez le fil de démon avec cette fonction comme une cible et passez dans la demande ou l'objet de fichier comme argument. Et renvoyez le redirection immédiatement après le démarrage du fil. N'oubliez pas d'appeler le fil (). Start () Méthode.

La question est, quand le flacon commence à recevoir un fichier. S'il commence immédiatement avant un appel de route, c'est-à-dire tout en construisant l'objet de demande, cela ne fonctionnera pas. Vous devrez trouver un autre moyen autour de cela. Mais dans ce cas, je suis sûr que le ballon a déjà un soutien pour de telles choses.

Si cela fonctionne, du côté du client, vous ferez l'expérience du même comportement. Un navigateur attendra que le fichier est transféré et ne réagira que sur la redirection. Pour éviter cela, vous aurez besoin de JavaScript et d'Ajax Stuff. Ce serait plus facile si JQuery est utilisé. Vous pouvez même mettre en œuvre un suivi de progression de manière à ce que l'utilisateur puisse voir la quantité de fichier transférée et lorsque le processus est terminé, et en même temps, l'utilisateur sera en mesure d'utiliser le site.

Ow, dernière chose qui vient de me faire. Si vous rencontrez un problème qu'un autre client ne peut pas accéder au serveur lorsqu'un autre téléchargeait un fichier, vous n'avez pas démarré correctement au flacon et il n'a rien à voir avec ASYNC IO dans votre script ou non.


0 commentaires