 
      
    Python
    3
    Вклад в тег
    
      
      
    
  
  
connection = sqlite3.connect("PATH")
cursor = connection.cursor()
cursor.execute("INSERT OR IGNORE INTO users (id) VALUES (:id)", {"id": id})OR IGNORE для того, чтобы, если пользователь уже записан, ничего не произошло (иначе будет ошибка)zipMaker() успевает обработать все данные: функция main завершается сразу после того, как завершается выполнение цикла.func main() {
     // your code
    locker := make(chan struct{})
    <-locker
}httpGet() и parser() в горутинах. Лучше возвращать []Gallery, после чего проходиться по нему и вызывать горутину для каждого элемента. При этом нужно воспользоваться sync.WaitGroup. Код будет выглядеть примерно так:package main
import (
    "log"
    "sync"
    "time"
)
// Для удобства
type Gallery int
func main() {
    // То, что должна вернуть функция parser()
    results := []Gallery{5, 6, 7, 8}
    var wg sync.WaitGroup
    for _, r := range results {
        wg.Add(1)
        go zipMaker(r, &wg)
    }
 
    log.Println("Wait")
    // Ждём выполнения горутин
    wg.Wait()
    // "Done" напечатается через 2 секунды после "Wait"
    log.Println("Done")
}
func zipMaker(g Gallery, wg *sync.WaitGroup) {
    defer wg.Done()
    // your code
    time.Sleep(time.Second * 2)
}sync.WaitGroup позволяет ждать обработки всех данных. Подробнее можно почитать тут.