python多处理。子流程在其任务完成之前都会停止

python多处理。子流程在其任务完成之前都会停止,python,web-crawler,python-multiprocessing,Python,Web Crawler,Python Multiprocessing,我使用python多处理模块测试了一些代理。它们在一开始工作得很好。但是,几分钟后,它们变慢了。然后我检查了任务管理器,发现只剩下2个子进程。后来,所有进程都停止了,即使它们的任务没有完成 我可以问一下为什么不 #coding:utf-8 import urllib2 import re import cookielib import time import urllib import multiprocessing h = { 'Connection' : '

我使用python多处理模块测试了一些代理。它们在一开始工作得很好。但是,几分钟后,它们变慢了。然后我检查了任务管理器,发现只剩下2个子进程。后来,所有进程都停止了,即使它们的任务没有完成

我可以问一下为什么不

#coding:utf-8
import urllib2
import re
import cookielib
import time
import urllib
import multiprocessing

h = {
                'Connection' : 'keep-alive' ,
                'Accept' : '*/*' ,
                'User_Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36' ,
                }

f_r=open('ip2.txt','r')
ips=f_r.readlines()
#print rows

#print ips

q = multiprocessing.Queue()
for ip in ips:
    q.put(ip.replace('\n' , ''))

def worker(q):
    global h
    while not q.empty():
        ip = q.get()
        proxy_ip='http://'+ip
        print proxy_ip
        proxy = urllib2.ProxyHandler( { 'http' : proxy_ip } )
        cj = cookielib.CookieJar()  
        cookie_support = urllib2.HTTPCookieProcessor(cj)  
        opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  
        opener.add_handler( proxy )
        urllib2.install_opener(opener)
        try:
            urllib2.urlopen(urllib2.Request('http://www.zhihu.com' ,headers=h),timeout=3)
            print ip+'   OK!!!'
            with open('ip_canuse.txt','a') as f_w:
                f_w.write(ip + '\n')
            break
        except Exception,e:
            print e
            continue

if __name__ == '__main__':         
    ps=[]
    for i in range(10):
        ps.append(multiprocessing.Process(target = worker, args = (q,)))
    for p in ps:
        p.daemon = True
        p.start()
    for p in ps:
        p.join()

    print "end"

结果是我在那里添加了一个不必要的“break”,这导致了问题。

结果是我在那里添加了一个不必要的“break”,这导致了问题。

您的每个员工似乎都自己清空了整个q队列?当您说-即使他们的任务没有完成你看到了什么?做了什么?谢谢你的回复!!!我是个傻瓜。那个“破口”一定不在那里!!您的每个工作人员似乎都自己清空了整个q队列?当您说-即使他们的任务没有完成你看到了什么?做了什么?谢谢你的回复!!!我是个傻瓜。那个“破口”一定不在那里!!我编辑了你的答案,以表明你自己找到了解决方案。如果您不同意我的编辑,可以将其回滚。要将其回滚,请单击“编辑…之前”链接。这将带您进入编辑历史记录。从那里,你可以回到你文章的早期版本。我编辑了你的答案,以表明你自己找到了解决方案。如果您不同意我的编辑,可以将其回滚。要将其回滚,请单击“编辑…之前”链接。这将带您进入编辑历史记录。从那里,您可以回滚到您的帖子的早期版本。