proc/looper/loop.go
func Loop(ctx context.Context, logger log.Logger, db *reform.DB,
	queue job.Queue, duration time.Duration, f func() []*data.Job) {
	tik := time.NewTicker(duration)
	logger = logger.Add("method", "Loop")

	go loop(ctx, tik, db, queue, f, logger, nil)
}
func Loop(ctx context.Context, logger log.Logger, db *reform.DB,
	queue job.Queue, duration time.Duration, f func() []*data.Job) {
	tik := time.NewTicker(duration)
	logger = logger.Add("method", "Loop")

	go loop(ctx, tik, db, queue, f, logger, nil)
}
// Loop performs a function that creates new jobs with a certain frequency.
// If at the moment there is already a similar active job, then such job is
// ignored. The function works correctly only with jobs for which duplicates
// are allowed.