Global variables problem

Navkirat Singh navkirats at gmail.com
Wed Aug 4 09:47:27 CEST 2010


 : ( 

False alarm, the earlier solution breaks multiprocessing. Whats happening here is the child needs to change a variable in the parent process, So I think I am looking at shared memory (maybe). Any suggestions?

Regards,
Nav



On 04-Aug-2010, at 12:41 PM, Navkirat Singh wrote:

> Thanks a lot guys !!
> 
> I solved the problem:
> 
> In the lines:
> 
>>> new_process = process(target=newprocess)
>>>                        new_process.start()
> 
> 
> 
> The target=newprocess is pointing towards a variable, instead of a function. So, appending a () will make it goto that function, thereby changing the global variable : )
> 
> Thanks,
> Nav
> 
> 
> On 04-Aug-2010, at 11:42 AM, Daniel da Silva wrote:
> 
>> Your problem lies somewhere in the use of the Process class, not with global variables.
>> 
>> If you replace your "p = ..." and "p.start()" lines with a direct call to self.handle_connection(), your code works as expected. I don't know much about the multiprocessing module, so I can't really comment on what you're doing wrong, but I hope this points you in the right direction.
>> 
>> Sorry I couldn't be of more help,
>> 
>> Daniel
>> 
>> 
>> On Tue, Aug 3, 2010 at 9:48 PM, Navkirat Singh <navkirats at gmail.com> wrote:
>> 
>> On 04-Aug-2010, at 9:46 AM, Daniel da Silva wrote:
>> 
>>> Please post approximate code that actually works and displays the problem. 
>>> 
>>> On Tue, Aug 3, 2010 at 9:00 PM, Navkirat Singh <navkirats at gmail.com> wrote:
>>> Hey guys,
>>> 
>>> I am using a multiprocessing program, where the new process is supposed to change a variable in the main class that it branches out from. This is somehow not working, following is an approximate code. Would really appreciate any insight into this matter:
>>> 
>>> 
>>> var = {}
>>> 
>>> class Something():
>>> 
>>>        def set_var(self):
>>>                global var
>>>                var = somevalue
>>> 
>>>        def get_var(self):
>>>                return var
>>> 
>>>        def newprocess(self):
>>>                self.set_var()
>>> 
>>>        def do_multiprocessing(self):
>>>                while true:
>>>                        self.get_var()
>>>                        new_process = process(target=newprocess)
>>>                        new_process.start()
>>> 
>>> 
>>> I am really confused here !
>>> 
>>> Any help would be awesome : )
>>> 
>>> Regards,
>>> Nav
>>> 
>>> --
>>> http://mail.python.org/mailman/listinfo/python-list
>>> 
>> 
>> This is a working code, streamlined, but it is where the problem is:
>> 
>> from multiprocessing import * 
>> 
>> dicts = 0
>> print('global ', dicts)
>> 
>> class WebServer():
>> 	
>> 	def set_sessionInfo(self):
>> 		global dicts
>> 		dicts = dicts + 1
>> 	
>> 	def get_sessionInfo(self):
>> 		return dicts	
>> 
>> 	def handle_connection(self):
>> 		self.set_sessionInfo()
>> 	
>> 	def serve_forever(self):
>> 		for x in range(10):
>> 			p = Process(target=self.handle_connection)
>> 			p.start()
>> 			print(self.get_sessionInfo())
>> 			
>> ws = WebServer()
>> ws.serve_forever()
>> print(dicts)
>> 
>> 
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20100804/44926a0f/attachment.html>


More information about the Python-list mailing list