[英]Make 2 functions run at the same time and in parallel?
我有一个数组
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
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()
当您编写target = func1(url)
您实际上在运行func1
并将结果传递给Thread
(该函数不是引用)。 这意味着函数在循环中运行,而不是在单独的线程中。
您需要像这样重写它:
if __name__ == '__main__':
myArray = array(url1,url2,...,url90)
for(url in myArray):
Thread(target=func1, args=(url,))).start()
然后,您告诉Thread使用参数(url,)
运行func1
另外,您应该在循环之后等待线程完成,否则您的程序将在启动所有线程之后立即终止。
编辑:如果您只希望同时运行3个线程,则可能要使用ThreadPool:
if __name__ == '__main__':
from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=3)
pool.map(func, myArray)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.