使2个函数同时并行运行?

时间:2016-09-09 08:59:19

标签: python parallel-processing scrapy ipython-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

我看了this questionthis 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()

1 个答案:

答案 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')
};