This has nothing to do with the global keyword as such, and all to do with the fact you have a circular import. main imports module, and module imports main. Also affecting this is the slightly quirky way that python names modules.
When you import a module python will look in the list of currently imported modules for a module with the same name. If one is found that module is used, otherwise the module is looked up on the python path and loaded. However the module that is run as the entry point us given the name "__main__" rather than its actual name. So, when your moduly.py module is loaded it imports a module named main. It does not find that module because the main module was given the name __main__, so it loads it again. Because it loads it again it does not see any changes that were already made, and gets the original value of the global variable.
You can illustrate this by creating a new module that is purely used as an entry point.
[b]entry.py[/p]
Now if you run entry.py you will find that your code fails with an Exception (a NameError because global name 'var' is not defined in module.py). This error is because of the circular import.
There is a stack-overflow
thread about this question that probably answers it better than me:
https://stackoverflow.com/questions/14207426/value-of-variable-referenced-from-another-module-does-not-change-after-it-is-cha