Global variables problem
Navkirat Singh
navkirats at gmail.com
Wed Aug 4 03:47:27 EDT 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-0001.html>
More information about the Python-list
mailing list