繁体   English   中英

使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个网址,

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM