我正在尝试用多处理模块
编写一个蜘蛛这是我的python代码:
# -*- coding:utf-8 -*-
import multiprocessing
import requests
class SpiderWorker(object):
def __init__(self, q):
self._q = q
def run(self):
def _crawl_item(url):
requests.get("http://www.baidu.com")
if respon.ok:
print respon.url
while True:
rst = self._q.get()
_crawl_item(rst)
def general_worker():
q = multiprocessing.Queue()
CPU_COUNT = multiprocessing.cpu_count()
worker_processes = [
multiprocessing.Process(target=SpiderWorker(q).run)
for i in range(CPU_COUNT)
]
map( lambda process: process.start(), worker_processes )
return q, worker_processes
也许这是我的过程方式错误 每次运行此代码时,我的流程都会告诉我
<Process(Process-1, stopped[SIGSEGV])>
希望爱它
答案 0 :(得分:2)
这里的主要问题是您没有关于为什么您的流程失败的任何信息。它可能是gevent,但它可能很容易成为别的东西。因此,了解流程终止的实际原因是做其他事情之前的第一步。
您需要的是multiprocessing.log_to_stderr()
:
class SpiderWorker(object):
# ...
def run(self):
logger = multiprocessing.log_to_stderr()
logger.setLevel(multiprocessing.SUBDEBUG)
try:
# Here goes your original run() code
except Exception:
logger.exception('whoopsie')
此代码的作用:
multiprocessing
模块事件(以防您可能不需要它们)。.exception()
方法,它不仅记录消息(因为我们不知道实际发生了什么,它无意义)但最重要的是记录整个错误追溯 - 我们确实需要。