[web2py] Re: Scheduler erroring when threading and trying to do database update.

2015-12-02 Thread Benson Myrtil
Was able to get this working. When I created the task, I originally had the 
application named something else. After renaming the application I forgot 
to update the application_name on the scheduler_task table. Once I did that 
it started working.

On Monday, November 23, 2015 at 4:33:34 PM UTC-5, Niphlod wrote:
>
> without the complete code is hard to see where the exception may raise, 
> but a serious question arises: why should you manage threads inside a 
> scheduler-executed task ? 
> At that level of abstraction, if you NEED to fine-tune code execution at 
> that level, just use a normal web2py shell.
>
> Did you try to start that machinery in web2py's shell just to avoid having 
> another layer of complexity brought by the scheduler ?
> BTW, for everybody: if you can code a function that works fine when used 
> in the web2py shell, the same will probably work when queued in the 
> Scheduler. If it doesn't in web2py's shell, start debugging from there 
> instead of inside the scheduler
>
> On Monday, November 23, 2015 at 9:54:14 PM UTC+1, Benson Myrtil wrote:
>>
>> I am getting the following error when running a scheduler task with 
>> threading:
>>
>> Traceback (most recent call last):   File 
>> "C:\Users\devteam\Desktop\web_apps\launchpad\production\web2py\gluon\scheduler.py",
>>  
>> line 298, in executor functions = current._scheduler.tasks 
>> AttributeError: 'thread._local' object has no attribute '_scheduler' 
>>
>> # THREAD FUNCTION TO SET ACCOUNT
>> def set_account( kwargs ):
>>while not q.empty( ):
>>   entry = q.get( )
>>   kwargs[ 'db_con' ].db.account.update_or_insert( kwargs[ 'db_con' 
>> ].db.account.ad_object_guid == entry[ 'ad_object_guid' ], **entry )
>>
>> # CREATE SET AMOUNT OF THREADS
>> for i in range( num_of_threads ):
>>key = 'Thread_{0}'.format( i )
>>db_con[ key ] = Launchpad_DB( fake_migration = True, lazy_tables = True, 
>> is_worker = True )
>>db_con[ key ].define_account( )
>>threads[ key ] = LaunchpadThread( i, key, set_account, db_con = db_con[ 
>> key ] )
>>threads[ key ].start( )
>> # WAIT FOR ALL THREADS TO FINISH
>> for key in threads:
>>threads[ key ].join( )
>>
>>
>> I am assuming the error is happening somewhere in there. I create a queue 
>> that holds all the accounts that are ready to be updated. I create a new 
>> DAL connection for each thread and pass that in.
>>
>> Any idea why I would be getting the error that I am?
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[web2py] Re: Scheduler erroring when threading and trying to do database update.

2015-11-23 Thread Niphlod
without the complete code is hard to see where the exception may raise, but 
a serious question arises: why should you manage threads inside a 
scheduler-executed task ? 
At that level of abstraction, if you NEED to fine-tune code execution at 
that level, just use a normal web2py shell.

Did you try to start that machinery in web2py's shell just to avoid having 
another layer of complexity brought by the scheduler ?
BTW, for everybody: if you can code a function that works fine when used in 
the web2py shell, the same will probably work when queued in the Scheduler. 
If it doesn't in web2py's shell, start debugging from there instead of 
inside the scheduler

On Monday, November 23, 2015 at 9:54:14 PM UTC+1, Benson Myrtil wrote:
>
> I am getting the following error when running a scheduler task with 
> threading:
>
> Traceback (most recent call last):   File 
> "C:\Users\devteam\Desktop\web_apps\launchpad\production\web2py\gluon\scheduler.py",
>  
> line 298, in executor functions = current._scheduler.tasks 
> AttributeError: 'thread._local' object has no attribute '_scheduler' 
>
> # THREAD FUNCTION TO SET ACCOUNT
> def set_account( kwargs ):
>while not q.empty( ):
>   entry = q.get( )
>   kwargs[ 'db_con' ].db.account.update_or_insert( kwargs[ 'db_con' 
> ].db.account.ad_object_guid == entry[ 'ad_object_guid' ], **entry )
>
> # CREATE SET AMOUNT OF THREADS
> for i in range( num_of_threads ):
>key = 'Thread_{0}'.format( i )
>db_con[ key ] = Launchpad_DB( fake_migration = True, lazy_tables = True, 
> is_worker = True )
>db_con[ key ].define_account( )
>threads[ key ] = LaunchpadThread( i, key, set_account, db_con = db_con[ 
> key ] )
>threads[ key ].start( )
> # WAIT FOR ALL THREADS TO FINISH
> for key in threads:
>threads[ key ].join( )
>
>
> I am assuming the error is happening somewhere in there. I create a queue 
> that holds all the accounts that are ready to be updated. I create a new 
> DAL connection for each thread and pass that in.
>
> Any idea why I would be getting the error that I am?
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.