I have pasted some of my code below. I am using threads.

How can I save the values 
    
    
    getSellerCountry(html)
    
    Run

and 
    
    
    sellerId
    
    Run

in a global, thread-safe variable (table), so that I can later when the threads 
have finished, write the results into a database? Must I use channels?
    
    
    proc getSellerCountry(html: string): string =
        let xml = parseHTML(html)
        let element = 
xml.querySelectorAll("div.a-row.a-spacing-none.indent-left > span")
        return element[element.high].innerText.strip
    
    proc getContent(sellerId: string, url: string, ip: string, user: string, i: 
int, userAgent: string) {.thread.} =
        let headers = setHeader("https://www.google.fr";, userAgent)
        var myProxy = newProxy(ip, user)
        var client = newHttpClient(proxy=myProxy, headers=headers)
        let r = client.request(url).body
        let html = uncompress(r)
        
        try:
            echo getSellerCountry(html), sellerId
        except Exception as e:
            echo e.msg
            echo "Error ", sellerId
    
    for sellerId in sellerIds:
        let ua = fk.UserAgent()
        url = "https://www.amazon.fr/sp?ie=UTF8&seller="; & sellerId & 
"&ref_=dp_merchant_link"
        spawn getContent(sellerId, url, "http://"; & ip[i], userPass[i], i, 
ua.random.to(string))
        i += 1
    sync()
    
    
    Run

Reply via email to