2013-02-21 5 views
1

J'ai un script python (exe fait avec py2exe) qui fonctionne sur plusieurs machines. Cet exe Python fait deux choses périodiquement; un thread écrit un fichier py pour un traitement ultérieur tandis qu'un autre thread écoute sur un port tcp en utilisant le module pyZmq. L'a couru parfaitement pendant des jours, en utilisant environ 12Mo de RAM.Conserver le ram pour le processus python

Maintenant, voici le problème: ces machines exécutent également le rendu 3dsmax. 3dsmax prend tout ram disponible sur le système, ne laissant que 4 Mo de ram pour mon script. Dans cet état, le thread de création de rapports (écriture de fichier py) s'exécute correctement, mais celui qui écoute sur le port tcp ne fonctionne plus (les messages envoyés à la machine ne sont pas reçus).

Cependant, ce processus exe python fonctionne sur la priorité de haut niveau:

set_nice(psutil.HIGH_PRIORITY_CLASS) 

Alors, comment puis-je réserver 14Mo de ram pour mon processus, de sorte qu'aucun autre processus en cours peut prendre ce bélier? Ou une autre façon d'éviter que l'exe «donne» son bélier à d'autres processus?

Merci, Kib

+0

Il peut y avoir quelques bonnes pistes dans [Limiter la mémoire de processus Windows (ou utilisateur)] (http://stackoverflow.com/questions/192876/set-windows-process-or-user-memory-limit) – Octipi

+0

Pourquoi Pensez-vous que la faible RAM disponible cause le problème? Avez-vous des erreurs de mémoire? Sauf si le fichier de la page de mémoire virtuelle est désactivé, cela ne devrait pas poser de problème. – barracel

Répondre

0

Vous pouvez utiliser l'appel Win32 VirtualLock. Je ne vois pas d'exemples simples de python, et je n'ai pas de machine Windows à portée de main, mais cela pourrait être relativement facile.

En dehors de Python ProcessHacker semble comme il pourrait être en mesure de le faire, mais je ne peux pas vérifier.

En général, c'est une mauvaise idée. Je pense que vous pouvez avoir un problème plus sérieux. Bonne chance!

Questions connexes