同时并行制作 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)