2016-09-09 5 views
0

У меня есть массивСделать 2 функции одновременно и параллельно?

myArray = array(url1,url2,...,url90) 

Я хочу, чтобы выполнить этот COMMANDE 3 раза в параллельном

scrapy crawl mySpider -a links=url

и каждый раз с 1 URL,

scrapy crawl mySpider -a links=url1 
scrapy crawl mySpider -a links=url2 
scrapy crawl mySpider -a links=url3 

и когда первый один закончить свою работу, он получит другой URL-адрес, как

scrapy crawl mySpider -a links=url4 

Я прочитал this question и this one, и я стараюсь это:

import threading 
from threading import Thread 

def func1(url): 

    scrapy crawl mySpider links=url 

if __name__ == '__main__': 
    myArray = array(url1,url2,...,url90) 
    for(url in myArray): 
     Thread(target = func1(url)).start() 

ответ

2

Когда вы пишете target = func1(url) вы на самом деле Runnig func1 и проходящее результат Thread (не ссылка сделать функцию). Это означает, что функции выполняются в цикле не в отдельном потоке.

Вам нужно переписать так:

if __name__ == '__main__': 
    myArray = array(url1,url2,...,url90) 
    for(url in myArray): 
     Thread(target=func1, args=(url,))).start() 

Тогда вы рассказываете тему запустить func1 с аргументами (url,)

Также вы должны ждать Темы закончить после цикла, в противном случае ваша программа с завершаться сразу после запуска всех потоков.

EDIT: и если вы хотите только 3 темы, которые будут работать на то же время вы можете использовать ThreadPool:

if __name__ == '__main__': 
    from multiprocessing.pool import ThreadPool 

    pool = ThreadPool(processes=3) 
    pool.map(func, myArray) 
+0

Когда первый один закончил свою работу, он делате другой адрес? , в вашем редактировании вы не пишете «for loop» – parik

+0

Да - ThreadPools создает 3 потока, а 'pool.map' запускает' func' для каждого элемента из 'myArray' с помощью этих потоков. Поэтому, когда один поток заканчивает свое задание, он запускает 'func' со следующим url из' myArray'. В этом случае вам не нужно писать «for loop», поскольку функции «map» выполняются внутри. – Pax0r