如何在 Python 中停止一次调度程序迭代
How to stop one scheduler iteration in Python
我是 Python(和一般编程)的新手。我有一个 pcode,可以通过 PyCURL 定期下载网站内容并进行一些搜索。我在 While-True 中使用了调度程序来设置一个无限循环,我在其中创建一个对象并调用它的方法 start() 来获取网站并执行一些搜索。当 getbody() 方法无法获取网站时会出现问题,由于连接问题(或其他原因)。 BeautifulSoup 需要字符串,否则会引发错误。
如何在 getbody() 方法中出现 Error/Exception 时停止调度程序的线程并等待另一个线程?作为 getbody() 方法的结果返回空字符串是浪费 cpu 时间。
#Parser_module
class Parser(object):
def __init__(self):
self.body = BeautifulSoup(self.getbody(), "lxml")
self.buffer = BytesIO()
def getbody(self):
# some code to set pycurl up
try:
c.perform()
except pycurl.error:
print("connection error")
# returns an emptry string to feed the BeautifulSoup with
return ""
body = self.buffer.getvalue().decode("utf-8")
return body
def start(self):
#calls other functions to perform some searching
self.otherfunction()
def otherfunction(self):
.
.
.
#Scheduler module
import Parser_module
from threading import Timer
def start_search():
parser = Parser()
parser.start()
t = Timer(20.0, start_search)
t.start()
如果发生错误,您可以在 Parser.start
和 return 中获取 URL,而不是在 Parser.__init__
中获取。
class Parser(object):
def __init__(self):
self.body = None
self.buffer = BytesIO()
def start():
data = self.getbody()
if not data:
return
self.body = BeautifulSoup(data, "lxml")
self.otherfunction()
def getbody(self):
...
def otherfunction(self):
...
附带说明一下,我建议您使用更好的 requests library instead of pycurl, if you can. Also check out PEP8,Python 风格指南,例如有关如何命名事物的一些建议。
我是 Python(和一般编程)的新手。我有一个 pcode,可以通过 PyCURL 定期下载网站内容并进行一些搜索。我在 While-True 中使用了调度程序来设置一个无限循环,我在其中创建一个对象并调用它的方法 start() 来获取网站并执行一些搜索。当 getbody() 方法无法获取网站时会出现问题,由于连接问题(或其他原因)。 BeautifulSoup 需要字符串,否则会引发错误。
如何在 getbody() 方法中出现 Error/Exception 时停止调度程序的线程并等待另一个线程?作为 getbody() 方法的结果返回空字符串是浪费 cpu 时间。
#Parser_module
class Parser(object):
def __init__(self):
self.body = BeautifulSoup(self.getbody(), "lxml")
self.buffer = BytesIO()
def getbody(self):
# some code to set pycurl up
try:
c.perform()
except pycurl.error:
print("connection error")
# returns an emptry string to feed the BeautifulSoup with
return ""
body = self.buffer.getvalue().decode("utf-8")
return body
def start(self):
#calls other functions to perform some searching
self.otherfunction()
def otherfunction(self):
.
.
.
#Scheduler module
import Parser_module
from threading import Timer
def start_search():
parser = Parser()
parser.start()
t = Timer(20.0, start_search)
t.start()
如果发生错误,您可以在 Parser.start
和 return 中获取 URL,而不是在 Parser.__init__
中获取。
class Parser(object):
def __init__(self):
self.body = None
self.buffer = BytesIO()
def start():
data = self.getbody()
if not data:
return
self.body = BeautifulSoup(data, "lxml")
self.otherfunction()
def getbody(self):
...
def otherfunction(self):
...
附带说明一下,我建议您使用更好的 requests library instead of pycurl, if you can. Also check out PEP8,Python 风格指南,例如有关如何命名事物的一些建议。