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"