This is strange. This must be a problem with transactions in sqlite.
Will run more tests tomorrow.

On 12 Ago, 15:11, Niphlod <niph...@gmail.com> wrote:
> Actually 2 workers end up with fetching the same task_scheduled also
> with the new logic.
>
> Reproducing is as simple as, in a controller :
>
> def submit_work():
>     from gluon.contrib.simplejson import loads,dumps
>     db(db.task_scheduled.id>0).delete() #cleanup, we want "unique"
> values in a
>     for a in range(1000):
>         id = scheduler.db.task_scheduled.insert(
>     name = 'a',
>     func = 'demo1',
>     args = dumps(['test', a]),
>     vars = dumps({'test': 'test2'})
>     )
>     return '%s' % (id)
>
> def verify_work_done():
>     count = db.task_run.id.count()
>     result = db().select(db.task_run.output, count, groupby =
> db.task_run.output, having=count>1)
>     return dict(res=result)
>
> with testing app a0 as in the examples, where
>
> def demo1(*args,**vars):
>     print 'you passed args=%s and vars=%s' % (args, vars)
>     return 'done!'
>
> Hit submit_work(), start 2 or more workers, wait for finishing up
> task_scheduled, then hit verify_work_done().
>
> Several records returned, not good :P

Reply via email to