我有一个数组
myArray = array(url1,url2,...,url90)
我想要并行执行此命令3次
scrapy crawl mySpider -a links=url
每次都有1个网址,
scrapy crawl mySpider -a links=url1
scrapy crawl mySpider -a links=url2
scrapy crawl mySpider -a links=url3
当第一个完成他的工作时,他会得到另一个网址,如
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()
答案 0 :(得分:2)
当您编写func1
时,您实际上运行Thread
并将结果传递给if __name__ == '__main__':
myArray = array(url1,url2,...,url90)
for(url in myArray):
Thread(target=func1, args=(url,))).start()
(不是参考功能)。这意味着函数在循环上运行,而不是在单独的线程中运行。
你需要像这样重写它:
func1
然后你告诉Thread使用参数(url,)
if __name__ == '__main__':
from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=3)
pool.map(func, myArray)
此外,你应该等待Threads在循环之后完成,否则你的程序在启动所有线程之后就会终止。
编辑: 如果您只想在同一时间运行3个线程,则可能需要使用ThreadPool:
let postProperties = {
dateCreated: dateFormat('4 juillet 1991', 'yyyy-mm-dd')
};