同时并行制作 2 个函数 运行?
Make 2 functions run at the same time and in parallel?
我有一个数组
myArray = array(url1,url2,...,url90)
我想并行执行这个命令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, and 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()
当你写 target = func1(url)
时,你实际上 运行nig func1
并将结果传递给 Thread
(不是函数的引用)。这意味着函数 运行 在循环中而不是在单独的线程中。
你需要这样重写:
if __name__ == '__main__':
myArray = array(url1,url2,...,url90)
for(url in myArray):
Thread(target=func1, args=(url,))).start()
然后你告诉 Thread 运行 func1
参数 (url,)
此外,您还应该等待线程在循环后完成,否则您的程序会在启动所有线程后立即终止。
编辑:
如果您希望同时只有 3 个线程 运行,您可能需要使用 ThreadPool:
if __name__ == '__main__':
from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=3)
pool.map(func, myArray)
我有一个数组
myArray = array(url1,url2,...,url90)
我想并行执行这个命令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, and 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()
当你写 target = func1(url)
时,你实际上 运行nig func1
并将结果传递给 Thread
(不是函数的引用)。这意味着函数 运行 在循环中而不是在单独的线程中。
你需要这样重写:
if __name__ == '__main__':
myArray = array(url1,url2,...,url90)
for(url in myArray):
Thread(target=func1, args=(url,))).start()
然后你告诉 Thread 运行 func1
参数 (url,)
此外,您还应该等待线程在循环后完成,否则您的程序会在启动所有线程后立即终止。
编辑: 如果您希望同时只有 3 个线程 运行,您可能需要使用 ThreadPool:
if __name__ == '__main__':
from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=3)
pool.map(func, myArray)