函数没有在python中执行

时间:2016-08-16 19:08:07

标签: python cherrypy

我的(recharge_list and sms_list)课程

中有2个函数Server()
import os
import json
import requests
import cherrypy
import ConfigParser
from bs4 import BeautifulSoup

class Server():

    @cherrypy.expose
    def index(self):

        return "Seems Like You're Lost :D"


    @cherrypy.expose
    def recharge_list(self,carrier, state):
        details_array=[]
        small_details_array=[]
        price_cell_array=[]
        lst = []
        url = "link{}/{}".format(carrier,state)
        try:
            if self.t_arr.get(url) is not None:
                return json.dumps({'data': self.t_arr[url]})
        except AttributeError:
            self.t_arr = {}
        r  = requests.get(url)
        data = r.text
        soup = BeautifulSoup(data,"html.parser")
        table = soup.find('table',{'class':'table'})
        s=""
        detailtext = table.findAll('div',{'class':'detailtext'})


        for det in detailtext:
            details_array.append(det.text)

        smalldetails = table.findAll('div',{'style':'padding-top:5px'})

        for smallDet in smalldetails:
            small_details_array.append(smallDet.text);


        price_cells = table.findAll('td', {'class': 'pricecell'})
        for price_cell in price_cells:
            price_cell_array.append(price_cell.text)

        for i in range(len(details_array)):
            d_arr = {}
            d_arr['detail']=details_array[i]
            temp = small_details_array[i].split('\n')
            d_arr['talktime'] = temp[1] 
            d_arr['keyword']=temp[3]
            tempnew = price_cell_array[i].split('\n')
            d_arr['price'] = tempnew[1]
            d_arr['validity'] = tempnew[3]
            # global list
            lst.append(d_arr)
        self.t_arr[url] = lst
        return json.dumps({'data': self.t_arr[url]})

    @cherrypy.expose
    def sms_list(self,carrier, state):
        details_array=[]
        price_cell_array=[]
        lst = []
        url = "link/{}/{}".format(carrier,state)
        try:
            if self.t_arr.get(url) is not None:
                return json.dumps({'data': self.t_arr[url]})
        except AttributeError:
            self.t_arr = {}
        r  = requests.get(url)
        data = r.text
        soup = BeautifulSoup(data,"html.parser")
        table = soup.find('div',{'id':'SMS'})
        table2 = table.find('table',{'class':'table'})
        print(table2)
        s=""
        detailtext = table2.findAll('div',{'class':'detailtext'})


        for det in detailtext:
            details_array.append(det.text)

        smalldetails = table2.findAll('div',{'style':'padding-top:5px'})


        price_cells = table.findAll('td', {'class': 'pricecell'})
        for price_cell in price_cells:
            price_cell_array.append(price_cell.text)

        for i in range(len(details_array)):
            d_arr = {}
            d_arr['detail']=details_array[i]
            tempnew = price_cell_array[i].split('\n')
            d_arr['price'] = tempnew[1]
            d_arr['validity'] = tempnew[3]
            # global list
            lst.append(d_arr)
        self.t_arr[url] = lst
        return json.dumps({'data': self.t_arr[url]})

if __name__ == '__main__':
    ''' Setting up the Server with Specified Configuration'''

    cherrypy.config.update({'server.socket_host': '0.0.0.0',})
    cherrypy.config.update({'server.socket_port': int(os.environ.get('PORT', '5000')),})

cherrypy.quickstart(Server())

问题是,当我使用recharge_list运行我的服务器时,它可以工作,但是我必须从终端终止我的服务器并重新启动服务器以执行sms_list功能。

根据我的理解,Server类创建的对象只能执行第一个被调用的函数。

我应该在代码中编辑什么,以便我可以在不终止服务器的情况下执行这些功能。

1 个答案:

答案 0 :(得分:1)

  

根据我的理解,Server类创建的对象只能执行第一个被调用的函数。

事实并非如此。每次提供HTTP请求时,Web服务器都会调用与该请求的URL相关联的函数。

  

我应该在代码中编辑什么,以便我可以在不终止服务器的情况下执行这些功能。

sms_list(以及<{1}}中的)中,将recharge_list的每个实例替换为t_arr