rabin 7 years ago
parent
commit
adaa328d04
3 changed files with 50 additions and 30 deletions
  1. 18 16
      cron.py
  2. 13 1
      service/product.py
  3. 19 13
      service/ssgdfs.py

+ 18 - 16
cron.py

@@ -8,25 +8,27 @@ import time
 from demeter.core import *
 from gevent import monkey; monkey.patch_socket()
 import gevent
-timeSleep = 60
+timeSleep = 10
 
+def run(site, product):
+	site['product'] = product
+	service = Demeter.service(site['name'])
+	service.init(site)
+	service.start()
+	gevent.sleep(timeSleep)
 
-def run(id, name):
-	product = Demeter.service('product')
-	config = product.get(id)
-	if config:
-		service = Demeter.service(name)
-		service.init(config)
-		service.start()
-
-def ssgdfs():
+def handle():
 	while 1:
-		run(1, 'ssgdfs')
+		task = []
+		product = Demeter.service('product')
+		data = product.get()
+		if data:
+			for v in data:
+				product.status(v['id'], 2)
+				site = product.getSite(v['site_id'])
+				task.append(gevent.spawn(run, site, [v]))
+			gevent.joinall(task)
 		gevent.sleep(timeSleep)
-
-def handle():
-	gevent.joinall([
-		gevent.spawn(ssgdfs),
-	])
+		
 
 handle()

+ 13 - 1
service/product.py

@@ -8,7 +8,19 @@ from demeter.core import *
 import random
 
 class Product(object):
-	def get(self, site_id):
+	def getSite(self, site_id):
+		model = Demeter.model('site')
+		model.id = site_id
+		site = model.select(type='fetchone')
+		return site
+
+	def get(self):
+		model = Demeter.model('product')
+		model.status = 1
+		product = model.select()
+		if product:
+			return product
+		return False
 		model = Demeter.model('site')
 		model.id = site_id
 		site = model.select(type='fetchone')

+ 19 - 13
service/ssgdfs.py

@@ -12,25 +12,32 @@ class Ssgdfs(object):
 
 	def start(self):
 		if 'product' in self.config and self.config['product']:
-			# 打开浏览器
-			self.open()
-			# 登录
-			self.login()
-			# 开始进入抢购下单核心程序
-			self.core()
-			# 关闭
-			self.close()
+			try:
+				# 打开浏览器
+				self.open()
+				# 登录
+				self.login()
+				# 开始进入抢购下单核心程序
+				self.core()
+				# 关闭
+				self.close()
+			except BaseException, e:
+				print e
+				self.start()
 
 	def core(self):
 		# 开启多任务
+		'''
 		task = []
 		for v in self.config['product']:
 			task.append(gevent.spawn(self.buy, v))
 		gevent.joinall(task)
+		'''
+		for v in self.config['product']:
+			self.buy(v)
 
 	def buy(self, config):
 		product = Demeter.service('product')
-		product.status(config['id'], 2)
 		while 1:
 			state = self.check(config['link'])
 			if state == True:
@@ -46,10 +53,9 @@ class Ssgdfs(object):
 					product.order(order, pic, config['site_id'], config['id'])
 					product.status(config['id'], 4)
 					break
-				except Exception:
-					print 'error'
-					continue
-				else:
+				except BaseException, e:
+					print e
+					product.status(config['id'], 2)
 					continue
 			else:
 				gevent.sleep(30)