[Twisted-Python] Windows IOCP reactor Question

Schneider, Michael michael.l.schneider at ugsplm.com
Sun Mar 28 10:26:16 EST 2004


Thanks for the work on IOCP,

I really appriecaite the efforts and will make use of
it.


I am an old UNIX hacker, and I am delivering a Windows
project with twisted.

I am about as far away from a windows programmer that you
can get.

I did have to get memory info from the Widows OS.

I was going to use C, but then I found ctypes and the
struct python C struct wrapper.

It was nice to have a python only solution.  

As I was looking through the code in iocpcoreobject.c.
I noticed that most (maybe all) of the functionality could
be accessed by the ctypes module and the Struct package.

Being a newbie to windows programming, I am not comfortable 
making the definitive statement that it should use this, and
elimintate the C code.  

Instead I would like to ask the question.  Does anyone see
a problem replacing the  C code in iocpcoreobject.c with
a python module that leverages ctype.

I attached a simple python script that gets the memory from
a windows box using ctypes.

It would be very nice if no c compiler would be required to 
install twisted IOCP reactor from CVS.

Thanks,
Mike

-------------------------------------------------------

#!/usr/bin/env python

# Simple WMI and ctypes example
# Michael Schnedier

import os
import time

import wmi
from ctypes import *
from ctypes.wintypes import *
import win32api

class MEMORYSTATUS(Structure):
    _fields_ = [
        ('dwLength', DWORD),
        ('dwMemoryLoad', DWORD),
        ('dwTotalPhys', DWORD),
        ('dwAvailPhys', DWORD),
        ('dwTotalPageFile', DWORD),
        ('dwAvailPageFile', DWORD),
        ('dwTotalVirtual', DWORD),
        ('dwAvailVirtual', DWORD),
    ]


class ComputeNode:
    def __init__(self):      
        self.memInfo = None
        self.lastUpdate = time.time()
        self.update()
   

    def genMemoryXmlStringRep(self):
        self.validate()

        xmlString = \
"""<?xml version="1.0"?>
<MemoryInfo platform="windows"     
TotalPhysicalMemory="%d" 
AvailablePhysicalMemory="%d" 
TotalPageFileSize="%d" 
AvailPageFileSize="%d" 
GetTotalVirtualMemory="%d" 
GetAvailableVirtualMemory="%d" 
/>
"""%( self.getTotalPhysicalMemory(),
       self.getAvailPhysicalMemory(),
       self.getTotalPageFileSize(),
       self.getAvailPageFile(),
       self.getTotalVirtualMemory(),
       self.getAvailVirtualMemory())

        return xmlString

   

    def getTotalPhysicalMemory(self):
        self.validate()
        return self.memInfo.dwTotalPhys/1024/1024

    def getAvailPhysicalMemory(self):
        self.validate()
        return self.memInfo.dwAvailPhys/1024/1024

    def getTotalPageFileSize(self):
        self.validate()
        return self.memInfo.dwTotalPageFile/1024/1024

    def getAvailPageFile(self):
        self.validate()
        return self.memInfo.dwAvailPageFile/1024/1024

    def getTotalVirtualMemory(self):
        self.validate()
        return self.memInfo.dwTotalVirtual/1024/1024

    def getAvailVirtualMemory(self):
        self.validate()
        return self.memInfo.dwAvailVirtual/1024/1024

    def validate(self, deltaTrigger=60 ):
        deltaTime = time.time() - self.lastUpdate
        
        if (self.lastUpdate < 0) or (deltaTime > deltaTrigger):      
            self.update()

      
    def update(self):
        self.lastUpdate = time.time()

        newStatus = MEMORYSTATUS()
        windll.kernel32.GlobalMemoryStatus(byref(newStatus))
        self.memInfo =  newStatus
         


machineInfo = ComputeNode()

print machineInfo.genMemoryXmlStringRep()





Since
the C code seems to be a wrapper to COM services, and
registration of COM service I am curious

 
----------------------------------------------------------------
Michael Schneider
Senior Software Engineering Consultant
UGS PLM Solutions - an EDS Company
 
"The Greatest Performance Improvement Is the transitioning from a non-working state to the working state"
> 




More information about the Twisted-Python mailing list