2017-04-18 35 views
1

我试图弄清楚为什么多处理不起作用。我一直在挣扎几天知道..有人可以看看,看看我做错了什么。Python多处理池不能正常工作

我没有得到脚本的任何错误。它只是完成,就像它永远不会运行我在池中定义的函数。我甚至把一个假的函数名称,看看它是否尝试运行它的错误,甚至没有达到这一点。有什么想法吗??

该脚本适用于不使用多处理时,只是试图更快地创建脚本。我正在检查响应代码的7300个链接。先谢谢了。

def check_links(linklist): 
 
    returnList = [] 
 
    for links in linklist: 
 
     r = requests.get(links) 
 
     rc = r.status_code 
 
     strRc = str(rc) 
 
     result = links+' '+strRc 
 
     returnList.append(result) 
 
    yield returnList 
 

 
def main(): 
 
    pool = multiprocessing.Pool(4) 
 
    results = pool.map(check_links, MasterListNoDupes) 
 
    
 
    pool.close() 
 
    pool.join() 
 
    
 
    for result in results: 
 
     print(result) 
 
     
 
if __name__ == ' __main__': 
 
    main()

+0

你为什么'yield'如果你有可能会'return'ed?无论如何,你正在构建整个列表。另外,你会得到什么输出? – ForceBru

+0

'if __name__ =='__main __':','__main__'中有一个额外的空间。清除它 – Arun

+0

我放回去了。我试图将其作为故障排除步骤... –

回答

2

如果你的代码是完全一样的,你贴,然后幸运的解决办法,如果你看一下if声明向下探底的简单 - 你必须在字符串中前一个空间,应该读取'__main__'(它读取' __main__')。

所以,只要删除该空间,你可以继续你的编码!

我没有测试你的python-requests部分,因为我没有URL列表等,我只是写了一个虚拟方法,睡了一段随机时间,它似乎按预期工作。

+0

Thnx为您提供帮助。我用你的脚本,把我的名单放回去,它工作。谢谢..我已经尝试了很多方法,过去2天现在它正在工作。谢谢。 –

0

试试这个:

import multiprocessing 
import requests 
def check_links(links): 
    returnList = [] 
    print links 
    r = requests.get(links) 
    rc = r.status_code 
    strRc = str(rc) 
    result = links+' '+strRc 
    return result 

def main(): 
    pool = multiprocessing.Pool(4) 
    a = ['http://stackoverflow.com','https://www.google.co.in'] 
    results = pool.map(check_links, a) 

    pool.close() 
    pool.join() 

    for result in results: 
     print(result) 

if __name__ == '__main__': 
    main()