cobweb-launcher 1.2.58__py3-none-any.whl → 1.2.60__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cobweb-launcher might be problematic. Click here for more details.

cobweb/db/redis_db.py CHANGED
@@ -4,7 +4,7 @@ from cobweb import setting
4
4
  from redis.exceptions import ConnectionError, TimeoutError
5
5
 
6
6
 
7
- class RedisClient:
7
+ class RedisDB:
8
8
  def __init__(self, **kwargs):
9
9
  redis_config = kwargs or setting.REDIS_CONFIG
10
10
  self.host = redis_config['host']
@@ -147,4 +147,69 @@ class RedisClient:
147
147
 
148
148
  def execute_lua(self, lua_script: str, keys: list, *args):
149
149
  execute = self.execute_command("register_script", lua_script)
150
- return execute(keys=keys, args=args)
150
+ return execute(keys=keys, args=args)
151
+
152
+ def lock(self, key, t=15) -> bool:
153
+ lua_script = """
154
+ local status = redis.call('setnx', KEYS[1], 1)
155
+ if ( status == 1 ) then
156
+ redis.call('expire', KEYS[1], ARGV[1])
157
+ end
158
+ return status
159
+ """
160
+ status = self.execute_lua(lua_script, [key], t)
161
+ return bool(status)
162
+
163
+ def members(self, key, score, start=0, count=5000, _min="-inf", _max="+inf") -> list:
164
+ lua_script = """
165
+ local min = ARGV[1]
166
+ local max = ARGV[2]
167
+ local start = ARGV[3]
168
+ local count = ARGV[4]
169
+ local score = ARGV[5]
170
+ local members = nil
171
+
172
+ if ( type(count) == string ) then
173
+ members = redis.call('zrangebyscore', KEYS[1], min, max, 'WITHSCORES')
174
+ else
175
+ members = redis.call('zrangebyscore', KEYS[1], min, max, 'WITHSCORES', 'limit', start, count)
176
+ end
177
+
178
+ local result = {}
179
+
180
+ for i = 1, #members, 2 do
181
+ local priority = nil
182
+ local member = members[i]
183
+ local originPriority = nil
184
+ if ( members[i+1] + 0 < 0 ) then
185
+ originPriority = math.ceil(members[i+1]) * 1000 - members[i+1] * 1000
186
+ else
187
+ originPriority = math.floor(members[i+1])
188
+ end
189
+
190
+ if ( score + 0 >= 1000 ) then
191
+ priority = -score - originPriority / 1000
192
+ elseif ( score + 0 == 0 ) then
193
+ priority = originPriority
194
+ else
195
+ originPriority = score
196
+ priority = score
197
+ end
198
+ redis.call('zadd', KEYS[1], priority, member)
199
+ table.insert(result, member)
200
+ table.insert(result, originPriority)
201
+ end
202
+
203
+ return result
204
+ """
205
+ members = self.execute_lua(lua_script, [key], _min, _max, start, count, score)
206
+ return [(members[i].decode(), int(members[i + 1])) for i in range(0, len(members), 2)]
207
+
208
+ def done(self, keys: list, *args) -> list:
209
+ lua_script = """
210
+ for i, member in ipairs(ARGV) do
211
+ redis.call("zrem", KEYS[1], member)
212
+ redis.call("sadd", KEYS[2], member)
213
+ end
214
+ """
215
+ self.execute_lua(lua_script, keys, *args)
@@ -183,8 +183,13 @@ class LauncherApi(Launcher):
183
183
  logger.info("pause! waiting for resume...")
184
184
  elif check_emtpy_times > 2:
185
185
  self.__DOING__ = {}
186
- if not self._db.zcount(self._todo_key, _min="-inf", _max="(1000"):
186
+ seed_count = self._db.zcard(self._todo_key)
187
+ logger.info(f"队列剩余种子数:{seed_count}")
188
+ if not seed_count:
189
+ logger.info("Done! pause set...")
187
190
  self._pause.set()
191
+ else:
192
+ self._pause.clear()
188
193
  else:
189
194
  logger.info(
190
195
  "check whether the task is complete, "
@@ -192,6 +197,8 @@ class LauncherApi(Launcher):
192
197
  )
193
198
  check_emtpy_times += 1
194
199
  else:
200
+ if self._pause.is_set():
201
+ self._pause.clear()
195
202
  logger.info(LogTemplate.launcher_pro_polling.format(
196
203
  task=self.task,
197
204
  doing_len=len(self.__DOING__.keys()),
@@ -1,7 +1,6 @@
1
1
  import time
2
2
  import threading
3
3
 
4
- from h5py.h5pl import insert
5
4
 
6
5
  from cobweb.db import RedisDB
7
6
  from cobweb.base import Seed, logger
@@ -199,6 +198,8 @@ class LauncherPro(Launcher):
199
198
  )
200
199
  check_emtpy_times += 1
201
200
  else:
201
+ if self._pause.is_set():
202
+ self._pause.clear()
202
203
  logger.info(LogTemplate.launcher_pro_polling.format(
203
204
  task=self.task,
204
205
  doing_len=len(self.__DOING__.keys()),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cobweb-launcher
3
- Version: 1.2.58
3
+ Version: 1.2.60
4
4
  Summary: spider_hole
5
5
  Home-page: https://github.com/Juannie-PP/cobweb
6
6
  Author: Juannie-PP
@@ -17,15 +17,15 @@ cobweb/crawlers/crawler.py,sha256=pePDGroD6JJAht5QTU51L7MkFIY4ob9TKpznZ2wUmsw,89
17
17
  cobweb/crawlers/file_crawler.py,sha256=2Sjbdgxzqd41WykKUQE3QQlGai3T8k-pmHNmPlTchjQ,4454
18
18
  cobweb/db/__init__.py,sha256=uZwSkd105EAwYo95oZQXAfofUKHVIAZZIPpNMy-hm2Q,56
19
19
  cobweb/db/api_db.py,sha256=bDc5dJQxq4z04h70KUTHd0OqUOEY7Cm3wcNJZtTvJIM,3015
20
- cobweb/db/redis_db.py,sha256=7lnEbPjfyvWuuP2f9hZAfKxpK31eJCoDAB5wfNkds34,5495
20
+ cobweb/db/redis_db.py,sha256=A8J-QhtSt0GWnRVdFFFrkvg3kkCROwjO7y8efcaIRoA,7721
21
21
  cobweb/db/redis_db_new.py,sha256=F09LWVjtC2JFdCaKatZ2bAOLKbsnes85_nZRe2dtSIc,4697
22
22
  cobweb/exceptions/__init__.py,sha256=E9SHnJBbhD7fOgPFMswqyOf8SKRDrI_i25L0bSpohvk,32
23
23
  cobweb/exceptions/oss_db_exception.py,sha256=iP_AImjNHT3-Iv49zCFQ3rdLnlvuHa3h2BXApgrOYpA,636
24
24
  cobweb/launchers/__init__.py,sha256=qMuVlQcjErVK67HyKFZEsXf_rfZD5ODjx1QucSCKMOM,114
25
25
  cobweb/launchers/launcher.py,sha256=y1a72sANV-oJVpy_BI7BwKy7fY4AnpHqJK3t6czoCts,7896
26
26
  cobweb/launchers/launcher_air.py,sha256=KAk_M8F3029cXYe7m4nn3Nzyi89lbxJ2cqZjqW8iZ0E,2832
27
- cobweb/launchers/launcher_api.py,sha256=7K7Kl3dk7Ung9iRBwhiMrALEJywcR66ie5RIkLQEM-Y,7909
28
- cobweb/launchers/launcher_pro.py,sha256=EuTsa6ErqpqytdnWhQxHFhO6nXK1V9huvtAAKc_5a6U,8095
27
+ cobweb/launchers/launcher_api.py,sha256=ydx_xrOjGMhGTDdyN3Oxy5EHUvvbvetNj3mCX1GlNsw,8205
28
+ cobweb/launchers/launcher_pro.py,sha256=0Z3E1HA_D-yy_7hD7Q-HkYdy4v4AHYwyrR4i6HErIBo,8147
29
29
  cobweb/pipelines/__init__.py,sha256=zSUsGtx6smbs2iXBXvYynReKSgky-3gjqaAtKVnA_OU,105
30
30
  cobweb/pipelines/pipeline.py,sha256=4TJLX0sUHRxYndF5A4Vs5btUGI-wigkOcFvhTW1hLXI,2009
31
31
  cobweb/pipelines/pipeline_console.py,sha256=NEh-4zhuVAQOqwXLsqeb-rcNZ9_KXFUpL3otUTL5qBs,754
@@ -38,8 +38,8 @@ cobweb/utils/bloom.py,sha256=vng-YbKgh9HbtpAWYf_nkUSbfVTOj40aqUUejRYlsCU,1752
38
38
  cobweb/utils/dotting.py,sha256=mVICaa26R-dQ4JGmPK-kkR6QjX38QiRewXZnGb2DCIc,1784
39
39
  cobweb/utils/oss.py,sha256=gyt8-UB07tVphZLQXMOf-JTJwU-mWq8KZkOXKkAf3uk,3513
40
40
  cobweb/utils/tools.py,sha256=5JEaaAwYoV9Sdla2UBIJn6faUBuXmxUMagm9ck6FVqs,1253
41
- cobweb_launcher-1.2.58.dist-info/LICENSE,sha256=z1rxSIGOyzcSb3orZxFPxzx-0C1vTocmswqBNxpKfEk,1063
42
- cobweb_launcher-1.2.58.dist-info/METADATA,sha256=QH36iouuBHu1S7g9-57Zek9aYa0CiEu7aIN7YOoNjzs,6510
43
- cobweb_launcher-1.2.58.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92
44
- cobweb_launcher-1.2.58.dist-info/top_level.txt,sha256=4GETBGNsKqiCUezmT-mJn7tjhcDlu7nLIV5gGgHBW4I,7
45
- cobweb_launcher-1.2.58.dist-info/RECORD,,
41
+ cobweb_launcher-1.2.60.dist-info/LICENSE,sha256=z1rxSIGOyzcSb3orZxFPxzx-0C1vTocmswqBNxpKfEk,1063
42
+ cobweb_launcher-1.2.60.dist-info/METADATA,sha256=9RTAhglArwI9C7Vr_oIxpE-2i7V3gg15RucZJ3r58n4,6510
43
+ cobweb_launcher-1.2.60.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92
44
+ cobweb_launcher-1.2.60.dist-info/top_level.txt,sha256=4GETBGNsKqiCUezmT-mJn7tjhcDlu7nLIV5gGgHBW4I,7
45
+ cobweb_launcher-1.2.60.dist-info/RECORD,,