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