the do_assign_task variable gets eventually shifted (read True to False,
False to True) every loop.
The issue is .... how can the execution be pushed far (in your case even 60
seconds) with no errors whatsoever ?
Usually when a TICKER has been chosen (or re-confirmed), do_assign_task is
set to True and the thread is put to sleep for 3 seconds.
There's quite no logic between the do_assign_task = True and the
self.sleep() line, so there's a "sure" timeframe of 3 seconds for the main
process to pick up the tasks.
Are you suggesting that sleeping the main loop and the heartbeat thread "at
the same pace" generates the problem you're seeing ?
If so, as a trial, can you please replace the self.sleep() call on at the
end of the loop() function to be, e.g. time.sleep(3.5) ?
On Wednesday, March 27, 2013 1:42:22 PM UTC+1, Paolo valleri wrote:
>
> So, I added: logger.debug('is_a_ticker := %s, worker_status[0] := %s',
> self.is_a_ticker, self.worker_status[0]) before the last if of relevant
> snippet you posted,logs:
>
> 2013-03-27 13:25:01,785 - web2py.scheduler.mapserver#29806 - INFO -
> TICKER: I'm a ticker
> 2013-03-27 13:25:01,797 - web2py.scheduler.mapserver#29806 - DEBUG -
> looping...
> 2013-03-27 13:25:01,798 - web2py.scheduler.mapserver#29806 - INFO - pop
> task True False
> 2013-03-27 13:25:01,950 - web2py.scheduler.mapserver#29806 - DEBUG -
> is_a_ticker := True, worker_status[0] := ACTIVE
> 2013-03-27 13:25:01,978 - web2py.scheduler.mapserver#29806 - INFO -
> nothing to do
>
> I supposed to see "is_a_ticker := True, worker_status[0] := ACTIVE" after
> "INFO - TICKER: I'm a ticker" and then something like: 'DEBUG - Assigning
> tasks..' but I didn't see it because I have 'INFO - pop task True False',
> the last False, means that self.do_assign_tasks was False. Later, the
> worker_status[0]
> is ACTIVE so it would set do_assign_tasks to True but it is too late.
> Given that, in some cases pop_task comes before the do_assign_tasks =
> True statement. This could be the problem, Is It correct?
>
>
>
>
> Paolo
>
>
> 2013/3/27 Niphlod <[email protected] <javascript:>>
>
>> yeps.
>> this is expected, but every ~15 seconds that turns to "True" (meaning
>> more or less "I'm the Ticker, I'm free, I was free in the last 15 seconds,
>> let's see if there are any submitted (or repeating) tasks to assign").
>> I don't have a python interpreter ATM but let's break up the logic, so
>> everyone can follow (and explaining most of the times lights up the
>> underlying problem, let's hope so)
>>
>> Who "tells" if that process is a Ticker is the "being_a_ticker()"
>> function.
>> being_a_ticker() is wrapped in a try_except clause, so you should see the
>> error logging in case something goes wrong --> Error coordinating TICKER
>>
>> one level up, do_assign_task is set every 5 cycles (or when "PICK" is
>> found), with the "prune dead workers" logic in the same statements...that
>> too is wrapped and should log --> Error cleaning up
>>
>> one level up, the whole thread checking is wrapped and should log -->
>> Error retrieving status
>>
>> Now, you get "I'm a TICKER", so the being_a_ticker() is getting executed,
>> and you don't have any errors reported...... this is the relevant snippet
>> try:
>> self.is_a_ticker = self.being_a_ticker()
>> except:
>> logger.error('Error coordinating TICKER')
>> if self.worker_status[0] == ACTIVE:
>> self.do_assign_tasks = True
>>
>> So...... either the worker status is not ACTIVE at that moment, or
>> self.do_assign_task is set to True .....
>>
>>
>>
>>
>>
>> --
>>
>> ---
>> You received this message because you are subscribed to a topic in the
>> Google Groups "web2py-users" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/web2py/u_PgzKLuQmw/unsubscribe?hl=en.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>
>
--
---
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.